Blame internal/osbuild1/source.go
|
Packit Service |
15f37d |
package osbuild1
|
|
Packit Service |
15f37d |
|
|
Packit Service |
15f37d |
import (
|
|
Packit Service |
15f37d |
"encoding/json"
|
|
Packit Service |
15f37d |
"errors"
|
|
Packit Service |
15f37d |
)
|
|
Packit Service |
15f37d |
|
|
Packit Service |
15f37d |
// A Sources map contains all the sources made available to an osbuild run
|
|
Packit Service |
15f37d |
type Sources map[string]Source
|
|
Packit Service |
15f37d |
|
|
Packit Service |
15f37d |
// Source specifies the operations of a given source-type.
|
|
Packit Service |
15f37d |
type Source interface {
|
|
Packit Service |
15f37d |
isSource()
|
|
Packit Service |
15f37d |
}
|
|
Packit Service |
15f37d |
|
|
Packit Service |
15f37d |
type rawSources map[string]json.RawMessage
|
|
Packit Service |
15f37d |
|
|
Packit Service |
15f37d |
// UnmarshalJSON unmarshals JSON into a Source object. Each type of source has
|
|
Packit Service |
15f37d |
// a custom unmarshaller for its options, selected based on the source name.
|
|
Packit Service |
15f37d |
func (sources *Sources) UnmarshalJSON(data []byte) error {
|
|
Packit Service |
15f37d |
var rawSources rawSources
|
|
Packit Service |
15f37d |
err := json.Unmarshal(data, &rawSources)
|
|
Packit Service |
15f37d |
if err != nil {
|
|
Packit Service |
15f37d |
return err
|
|
Packit Service |
15f37d |
}
|
|
Packit Service |
15f37d |
*sources = make(map[string]Source)
|
|
Packit Service |
15f37d |
for name, rawSource := range rawSources {
|
|
Packit Service |
15f37d |
var source Source
|
|
Packit Service |
15f37d |
switch name {
|
|
Packit Service |
15f37d |
case "org.osbuild.files":
|
|
Packit Service |
15f37d |
source = new(FilesSource)
|
|
Packit Service |
15f37d |
default:
|
|
Packit Service |
15f37d |
return errors.New("unexpected source name: " + name)
|
|
Packit Service |
15f37d |
}
|
|
Packit Service |
15f37d |
err = json.Unmarshal(rawSource, source)
|
|
Packit Service |
15f37d |
if err != nil {
|
|
Packit Service |
15f37d |
return err
|
|
Packit Service |
15f37d |
}
|
|
Packit Service |
15f37d |
(*sources)[name] = source
|
|
Packit Service |
15f37d |
}
|
|
Packit Service |
15f37d |
|
|
Packit Service |
15f37d |
return nil
|
|
Packit Service |
15f37d |
}
|