mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-05-18 17:37:46 +08:00
151 lines
3.5 KiB
Go
151 lines
3.5 KiB
Go
package pb
|
|
|
|
import "encoding/json"
|
|
|
|
type jsonOp struct {
|
|
Inputs []*Input `json:"inputs,omitempty"`
|
|
Op struct {
|
|
Exec *ExecOp `json:"exec,omitempty"`
|
|
Source *SourceOp `json:"source,omitempty"`
|
|
File *FileOp `json:"file,omitempty"`
|
|
Build *BuildOp `json:"build,omitempty"`
|
|
Merge *MergeOp `json:"merge,omitempty"`
|
|
Diff *DiffOp `json:"diff,omitempty"`
|
|
}
|
|
Platform *Platform `json:"platform,omitempty"`
|
|
Constraints *WorkerConstraints `json:"constraints,omitempty"`
|
|
}
|
|
|
|
func (m *Op) MarshalJSON() ([]byte, error) {
|
|
var v jsonOp
|
|
v.Inputs = m.Inputs
|
|
switch op := m.Op.(type) {
|
|
case *Op_Exec:
|
|
v.Op.Exec = op.Exec
|
|
case *Op_Source:
|
|
v.Op.Source = op.Source
|
|
case *Op_File:
|
|
v.Op.File = op.File
|
|
case *Op_Build:
|
|
v.Op.Build = op.Build
|
|
case *Op_Merge:
|
|
v.Op.Merge = op.Merge
|
|
case *Op_Diff:
|
|
v.Op.Diff = op.Diff
|
|
}
|
|
v.Platform = m.Platform
|
|
v.Constraints = m.Constraints
|
|
return json.Marshal(v)
|
|
}
|
|
|
|
func (m *Op) UnmarshalJSON(data []byte) error {
|
|
var v jsonOp
|
|
if err := json.Unmarshal(data, &v); err != nil {
|
|
return err
|
|
}
|
|
|
|
m.Inputs = v.Inputs
|
|
switch {
|
|
case v.Op.Exec != nil:
|
|
m.Op = &Op_Exec{v.Op.Exec}
|
|
case v.Op.Source != nil:
|
|
m.Op = &Op_Source{v.Op.Source}
|
|
case v.Op.File != nil:
|
|
m.Op = &Op_File{v.Op.File}
|
|
case v.Op.Build != nil:
|
|
m.Op = &Op_Build{v.Op.Build}
|
|
case v.Op.Merge != nil:
|
|
m.Op = &Op_Merge{v.Op.Merge}
|
|
case v.Op.Diff != nil:
|
|
m.Op = &Op_Diff{v.Op.Diff}
|
|
}
|
|
m.Platform = v.Platform
|
|
m.Constraints = v.Constraints
|
|
return nil
|
|
}
|
|
|
|
type jsonFileAction struct {
|
|
Input InputIndex `json:"input"`
|
|
SecondaryInput InputIndex `json:"secondaryInput"`
|
|
Output OutputIndex `json:"output"`
|
|
Action struct {
|
|
Copy *FileActionCopy `json:"copy,omitempty"`
|
|
Mkfile *FileActionMkFile `json:"mkfile,omitempty"`
|
|
Mkdir *FileActionMkDir `json:"mkdir,omitempty"`
|
|
Rm *FileActionRm `json:"rm,omitempty"`
|
|
}
|
|
}
|
|
|
|
func (m *FileAction) MarshalJSON() ([]byte, error) {
|
|
var v jsonFileAction
|
|
v.Input = InputIndex(m.Input)
|
|
v.SecondaryInput = InputIndex(m.SecondaryInput)
|
|
v.Output = OutputIndex(m.Output)
|
|
switch action := m.Action.(type) {
|
|
case *FileAction_Copy:
|
|
v.Action.Copy = action.Copy
|
|
case *FileAction_Mkfile:
|
|
v.Action.Mkfile = action.Mkfile
|
|
case *FileAction_Mkdir:
|
|
v.Action.Mkdir = action.Mkdir
|
|
case *FileAction_Rm:
|
|
v.Action.Rm = action.Rm
|
|
}
|
|
return json.Marshal(v)
|
|
}
|
|
|
|
func (m *FileAction) UnmarshalJSON(data []byte) error {
|
|
var v jsonFileAction
|
|
if err := json.Unmarshal(data, &v); err != nil {
|
|
return err
|
|
}
|
|
|
|
m.Input = int64(v.Input)
|
|
m.SecondaryInput = int64(v.SecondaryInput)
|
|
m.Output = int64(v.Output)
|
|
switch {
|
|
case v.Action.Copy != nil:
|
|
m.Action = &FileAction_Copy{v.Action.Copy}
|
|
case v.Action.Mkfile != nil:
|
|
m.Action = &FileAction_Mkfile{v.Action.Mkfile}
|
|
case v.Action.Mkdir != nil:
|
|
m.Action = &FileAction_Mkdir{v.Action.Mkdir}
|
|
case v.Action.Rm != nil:
|
|
m.Action = &FileAction_Rm{v.Action.Rm}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type jsonUserOpt struct {
|
|
User struct {
|
|
ByName *NamedUserOpt `json:"byName,omitempty"`
|
|
ByID uint32 `json:"byId,omitempty"`
|
|
}
|
|
}
|
|
|
|
func (m *UserOpt) MarshalJSON() ([]byte, error) {
|
|
var v jsonUserOpt
|
|
switch userOpt := m.User.(type) {
|
|
case *UserOpt_ByName:
|
|
v.User.ByName = userOpt.ByName
|
|
case *UserOpt_ByID:
|
|
v.User.ByID = userOpt.ByID
|
|
}
|
|
return json.Marshal(v)
|
|
}
|
|
|
|
func (m *UserOpt) UnmarshalJSON(data []byte) error {
|
|
var v jsonUserOpt
|
|
if err := json.Unmarshal(data, &v); err != nil {
|
|
return err
|
|
}
|
|
|
|
switch {
|
|
case v.User.ByName != nil:
|
|
m.User = &UserOpt_ByName{v.User.ByName}
|
|
default:
|
|
m.User = &UserOpt_ByID{v.User.ByID}
|
|
}
|
|
return nil
|
|
}
|