goap/nsUndefined.go
Melody 2f74543ca1 Meow
- No more BaseObject with Id and Type included, moved those into the
nsUndefined namespace
- Refactored the full parser funcs into two slightly distinct ones:
  - One that takes in raw bytes and one that takes in a map[string]any
2024-08-28 19:14:23 +02:00

58 lines
1.3 KiB
Go

package goap
type UDIdData struct {
Next BaseApChain
Id string
}
func (u *UDIdData) GetSelfOrBase() (BaseApChain, bool) {
return u.Next, true
}
func (b *UDIdData) MarshalToMap() map[string]any {
return appendWithKey(b.Next.MarshalToMap(), "KEY_ID", b.Id)
}
func ParseUDIdData(raw map[string]any, next BaseApChain) (BaseApChain, error) {
rawId, ok := raw[KEY_ID]
if !ok {
return nil, NoRequiredFieldError{KEY_ID}
}
id, ok := rawId.(string)
if !ok {
return nil, BadFieldValueError[string]{KEY_ID, rawId, ""}
}
delete(raw, KEY_ID)
return &UDIdData{
Next: next,
Id: id,
}, nil
}
type UDTypeData struct {
Next BaseApChain
Type string
}
func (u *UDTypeData) GetSelfOrBase() (BaseApChain, bool) {
return u.Next, true
}
func (u *UDTypeData) MarshalToMap() map[string]any {
return appendWithKey(u.Next.MarshalToMap(), KEY_TYPE, []any{u.Type})
}
func ParseUDTypeData(raw map[string]any, next BaseApChain) (BaseApChain, error) {
rawObjType, ok := raw[KEY_TYPE]
if !ok {
return nil, NoRequiredFieldError{KEY_TYPE}
}
objType, ok := rawObjType.([]string)
if !ok {
return nil, BadFieldValueError[[]string]{KEY_TYPE, rawObjType, []string{}}
}
if len(objType) != 1 {
return nil, BadFieldArrayLengthError{KEY_TYPE, 1, len(objType)}
}
return &UDTypeData{Next: next, Type: objType[0]}, nil
}