Blame internal/osbuild/assembler.go

Packit 63bb0d
package osbuild
Packit 63bb0d
Packit 63bb0d
import (
Packit 63bb0d
	"encoding/json"
Packit 63bb0d
	"errors"
Packit 63bb0d
)
Packit 63bb0d
Packit 63bb0d
// An Assembler turns a filesystem tree into a target image.
Packit 63bb0d
type Assembler struct {
Packit 63bb0d
	Name    string           `json:"name"`
Packit 63bb0d
	Options AssemblerOptions `json:"options"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// AssemblerOptions specify the operations of a given assembler-type.
Packit 63bb0d
type AssemblerOptions interface {
Packit 63bb0d
	isAssemblerOptions()
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
type rawAssembler struct {
Packit 63bb0d
	Name    string          `json:"name"`
Packit 63bb0d
	Options json.RawMessage `json:"options"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// UnmarshalJSON unmarshals JSON into an Assembler object. Each type of
Packit 63bb0d
// assembler has a custom unmarshaller for its options, selected based on the
Packit 63bb0d
// stage name.
Packit 63bb0d
func (assembler *Assembler) UnmarshalJSON(data []byte) error {
Packit 63bb0d
	var rawAssembler rawAssembler
Packit 63bb0d
	err := json.Unmarshal(data, &rawAssembler)
Packit 63bb0d
	if err != nil {
Packit 63bb0d
		return err
Packit 63bb0d
	}
Packit 63bb0d
	var options AssemblerOptions
Packit 63bb0d
	switch rawAssembler.Name {
Packit 63bb0d
	case "org.osbuild.ostree.commit":
Packit 63bb0d
		options = new(OSTreeCommitAssemblerOptions)
Packit 63bb0d
	case "org.osbuild.qemu":
Packit 63bb0d
		options = new(QEMUAssemblerOptions)
Packit 63bb0d
	case "org.osbuild.rawfs":
Packit 63bb0d
		options = new(RawFSAssemblerOptions)
Packit 63bb0d
	case "org.osbuild.tar":
Packit 63bb0d
		options = new(TarAssemblerOptions)
Packit 63bb0d
	default:
Packit 63bb0d
		return errors.New("unexpected assembler name")
Packit 63bb0d
	}
Packit 63bb0d
	err = json.Unmarshal(rawAssembler.Options, options)
Packit 63bb0d
	if err != nil {
Packit 63bb0d
		return err
Packit 63bb0d
	}
Packit 63bb0d
Packit 63bb0d
	assembler.Name = rawAssembler.Name
Packit 63bb0d
	assembler.Options = options
Packit 63bb0d
Packit 63bb0d
	return nil
Packit 63bb0d
}