52 lines
1.1 KiB
Go
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 FullIdType struct {
|
|
Next BaseApChain
|
|
Id string
|
|
}
|
|
|
|
func (idtype *FullIdType) GetSelfOrBase() (BaseApChain, bool) {
|
|
return idtype.Next, true
|
|
}
|
|
|
|
func (idtype *FullIdType) 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) (*FullIdType, error) {
|
|
rawData1, ok := m[name]
|
|
if !ok {
|
|
return nil, NoRequiredFieldError{name}
|
|
}
|
|
data1, ok := rawData1.([]map[string]any)
|
|
if !ok {
|
|
return nil, BadFieldValueError[[]map[string]any]{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[string]{name, rawData2, ""}
|
|
}
|
|
return &FullIdType{
|
|
Next: b,
|
|
Id: data2,
|
|
}, nil
|
|
}
|