Blame internal/target/target.go

Packit 63bb0d
package target
Packit 63bb0d
Packit 63bb0d
import (
Packit 63bb0d
	"encoding/json"
Packit 63bb0d
	"errors"
Packit 63bb0d
	"github.com/google/uuid"
Packit 63bb0d
	"github.com/osbuild/osbuild-composer/internal/common"
Packit 63bb0d
	"time"
Packit 63bb0d
)
Packit 63bb0d
Packit 63bb0d
type Target struct {
Packit 63bb0d
	Uuid      uuid.UUID              `json:"uuid"`
Packit 63bb0d
	ImageName string                 `json:"image_name"`
Packit 63bb0d
	Name      string                 `json:"name"`
Packit 63bb0d
	Created   time.Time              `json:"created"`
Packit 63bb0d
	Status    common.ImageBuildState `json:"status"`
Packit 63bb0d
	Options   TargetOptions          `json:"options"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func newTarget(name string, options TargetOptions) *Target {
Packit 63bb0d
	return &Target{
Packit 63bb0d
		Uuid:    uuid.New(),
Packit 63bb0d
		Name:    name,
Packit 63bb0d
		Created: time.Now(),
Packit 63bb0d
		Status:  common.IBWaiting,
Packit 63bb0d
		Options: options,
Packit 63bb0d
	}
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
type TargetOptions interface {
Packit 63bb0d
	isTargetOptions()
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
type rawTarget struct {
Packit 63bb0d
	Uuid      uuid.UUID              `json:"uuid"`
Packit 63bb0d
	ImageName string                 `json:"image_name"`
Packit 63bb0d
	Name      string                 `json:"name"`
Packit 63bb0d
	Created   time.Time              `json:"created"`
Packit 63bb0d
	Status    common.ImageBuildState `json:"status"`
Packit 63bb0d
	Options   json.RawMessage        `json:"options"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func (target *Target) UnmarshalJSON(data []byte) error {
Packit 63bb0d
	var rawTarget rawTarget
Packit 63bb0d
	err := json.Unmarshal(data, &rawTarget)
Packit 63bb0d
	if err != nil {
Packit 63bb0d
		return err
Packit 63bb0d
	}
Packit 63bb0d
	options, err := UnmarshalTargetOptions(rawTarget.Name, rawTarget.Options)
Packit 63bb0d
	if err != nil {
Packit 63bb0d
		return err
Packit 63bb0d
	}
Packit 63bb0d
Packit 63bb0d
	target.Uuid = rawTarget.Uuid
Packit 63bb0d
	target.ImageName = rawTarget.ImageName
Packit 63bb0d
	target.Name = rawTarget.Name
Packit 63bb0d
	target.Created = rawTarget.Created
Packit 63bb0d
	target.Status = rawTarget.Status
Packit 63bb0d
	target.Options = options
Packit 63bb0d
Packit 63bb0d
	return nil
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func UnmarshalTargetOptions(targetName string, rawOptions json.RawMessage) (TargetOptions, error) {
Packit 63bb0d
	var options TargetOptions
Packit 63bb0d
	switch targetName {
Packit 63bb0d
	case "org.osbuild.azure":
Packit 63bb0d
		options = new(AzureTargetOptions)
Packit 63bb0d
	case "org.osbuild.aws":
Packit 63bb0d
		options = new(AWSTargetOptions)
Packit 63bb0d
	case "org.osbuild.local":
Packit 63bb0d
		options = new(LocalTargetOptions)
Packit Service 509fd4
	case "org.osbuild.koji":
Packit Service 509fd4
		options = new(KojiTargetOptions)
Packit 63bb0d
	default:
Packit 63bb0d
		return nil, errors.New("unexpected target name")
Packit 63bb0d
	}
Packit 63bb0d
	err := json.Unmarshal(rawOptions, options)
Packit 63bb0d
Packit 63bb0d
	return options, err
Packit 63bb0d
}