Blame internal/osbuild/source.go

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