pcm-participant/ai/task/option.go

52 lines
1.3 KiB
Go

package task
import (
"encoding/json"
"fmt"
"gitlink.org.cn/JointCloud/pcm-participant-ai/common"
)
type ResultSyncParam struct {
Src *common.Source `json:"src,omitempty"`
Param ResultSyncParameter `json:"param,omitempty"`
}
type OpenI struct {
Id string `json:"id,omitempty"`
RepoName string `json:"repoName,omitempty"`
ParentDir string `json:"parentDir,omitempty"`
BootFile string `json:"bootFile,omitempty"`
DefaultBranch string `json:"defaultBranch,omitempty"`
}
func (o OpenI) ResultSyncParam() {
}
func (cp *ResultSyncParam) UnmarshalJSON(data []byte) error {
// 临时结构体:用于捕获原始 JSON 中的 param 字段数据
type TempCreateParam struct {
Src *common.Source `json:"src,omitempty"`
Param json.RawMessage `json:"param,omitempty"` // 捕获原始 JSON 数据
}
var temp TempCreateParam
if err := json.Unmarshal(data, &temp); err != nil {
return err
}
// 将临时结构体的字段赋值给原结构体(除 Param 外)
cp.Src = temp.Src
// 解析 param 字段的原始数据为具体类型
if temp.Param != nil {
// 尝试解析为 OpenI 类型
var openi OpenI
if err := json.Unmarshal(temp.Param, &openi); err == nil {
cp.Param = &openi
return nil
}
return fmt.Errorf("unsupported param type in ResultSyncParam")
}
return nil
}