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
}