JCC-CSScheduler/common/models/job/body.go

67 lines
1.8 KiB
Go

package jobmod
import (
"gitlink.org.cn/cloudream/common/pkgs/types"
schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler"
cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
"gitlink.org.cn/cloudream/common/utils/serder"
)
type JobBodyDumpType string
// 导出的任务体的状态,需要能被序列化
type JobBodyDump interface {
// 仅为了区分整个仓库中拥有同名函数的接口,不要调用这个函数
getType() JobBodyDumpType
}
var _ = serder.UseTypeUnionExternallyTagged(types.Ref(types.NewTypeUnion[JobBodyDump](
(*NormalJobDump)(nil),
(*DataReturnJobDump)(nil),
(*InstanceJobDump)(nil),
(*MultiInstanceJobDump)(nil),
)))
type NormalJobDump struct {
serder.Metadata `union:"NormalJob"`
Type JobBodyDumpType `json:"type"`
TargetCCID schsdk.CCID `json:"targetCCID"`
Files JobFiles `json:"files"`
}
func (d *NormalJobDump) getType() JobBodyDumpType {
return d.Type
}
type DataReturnJobDump struct {
serder.Metadata `union:"DataReturnJob"`
Type JobBodyDumpType `json:"type"`
DataReturnPackageID cdssdk.PackageID `json:"dataReturnPackageID"`
}
func (d *DataReturnJobDump) getType() JobBodyDumpType {
return d.Type
}
type InstanceJobDump struct {
serder.Metadata `union:"InstanceJob"`
Type JobBodyDumpType `json:"type"`
TargetCCID schsdk.CCID `json:"targetCCID"`
Files JobFiles `json:"files"`
}
func (d *InstanceJobDump) getType() JobBodyDumpType {
return d.Type
}
type MultiInstanceJobDump struct {
serder.Metadata `union:"MultiInstanceJob"`
Type JobBodyDumpType `json:"type"`
TargetCCID schsdk.CCID `json:"targetCCID"`
Files JobFiles `json:"files"`
}
func (d *MultiInstanceJobDump) getType() JobBodyDumpType {
return d.Type
}