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 }