package goap import "maps" type PublicKey struct { Id string Owner string Pem string } type Attachment struct { Type string Value string Name string } type Media struct { Type string MediaType string Url string } type IdValue struct { Id string } type ValueValue[T any] struct { Type *string Value T OtherThings map[string]any } func (p PublicKey) Marshal() map[string]any { return map[string]any{ KEY_ID: p.Id, KEY_W3_SECURITY_OWNER: IdValue{Id: p.Owner}.Marshal(), } } func (a Attachment) Marshal() map[string]any { return map[string]any{ KEY_TYPE: []string{KEY_SCHEMA_PROPERTYVALUE}, KEY_SCHEMA_VALUE: []map[string]any{ValueValue[string]{Value: a.Value}.Marshal()}, KEY_ACTIVITYSTREAMS_NAME: []map[string]any{ValueValue[string]{Value: a.Name}.Marshal()}, } } func (i IdValue) Marshal() map[string]any { return map[string]any{ KEY_ID: i.Id, } } func (v ValueValue[T]) Marshal() map[string]any { m := maps.Clone(v.OtherThings) m[KEY_VALUE] = v.Value if v.Type != nil { m[KEY_TYPE] = *v.Type } return m }