goap/commonTypes.go
2024-07-29 13:26:31 +02:00

52 lines
1.1 KiB
Go

package goap
// Helper type for parsing attributes where the value (after expansion) is of the following form
// ```json
// [
//
// {
// "@id": "some url here"
// }
//
// ]
// ```
type IdType struct {
Next BaseApChain
Id string
}
func (idtype *IdType) GetSelfOrBase() (BaseApChain, bool) {
return idtype.Next, true
}
func (idtype *IdType) MarshalToMapWithName(name string) map[string]any {
m := idtype.Next.MarshalToMap()
m[name] = []map[string]any{{KEY_ID: idtype.Id}}
return m
}
func ParseIdTypeWithName(m map[string]any, b BaseApChain, name string) (*IdType, error) {
rawData1, ok := m[name]
if !ok {
return nil, NoRequiredFieldError{name}
}
data1, ok := rawData1.([]map[string]any)
if !ok {
return nil, BadFieldValueError{name, rawData1, []map[string]any{{}}}
}
if len(data1) != 1 {
return nil, BadFieldArrayLengthError{name, 1, len(data1)}
}
rawData2, ok := data1[0][KEY_ID]
if !ok {
return nil, NoRequiredSubFieldError{name, KEY_ID}
}
data2, ok := rawData1.(string)
if !ok {
return nil, BadFieldValueError{name, rawData2, ""}
}
return &IdType{
Next: b,
Id: data2,
}, nil
}