debian-forge-composer/internal/target/target.go
Tom Gundersen e29b6fe06b target/aws: support setting the image name
This is part of the lorax API, so support forwarding this.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-11-28 05:56:11 +01:00

49 lines
973 B
Go

package target
import (
"encoding/json"
"errors"
)
type Target struct {
ImageName string `json:"image_name"`
Name string `json:"name"`
Options TargetOptions `json:"options"`
}
type TargetOptions interface {
isTargetOptions()
}
type rawTarget struct {
Name string `json:"name"`
Options json.RawMessage `json:"options"`
}
func (target *Target) UnmarshalJSON(data []byte) error {
var rawTarget rawTarget
err := json.Unmarshal(data, &rawTarget)
if err != nil {
return err
}
var options TargetOptions
switch rawTarget.Name {
case "org.osbuild.azure":
options = new(AzureTargetOptions)
case "org.osbuild.aws":
options = new(AWSTargetOptions)
case "org.osbuild.local":
options = new(LocalTargetOptions)
default:
return errors.New("unexpected target name")
}
err = json.Unmarshal(rawTarget.Options, options)
if err != nil {
return err
}
target.Name = rawTarget.Name
target.Options = options
return nil
}