package goap 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 Tag struct { Type string Href string Name string } type IdValue struct { Id string } type ValueValue[T any] struct { Type *string Value T } 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: ValueValue[string]{Value: a.Value}.Marshal(), } } func (t Tag) Marshal() map[string]any { return map[string]any{ KEY_TYPE: t.Type, KEY_ACTIVITYSTREAMS_NAME: t.Name, KEY_ACTIVITYSTREAMS_HREF: IdValue{Id: t.Href}.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 := map[string]any{ KEY_VALUE: v.Value, } if v.Type != nil { m[KEY_TYPE] = *v.Type } return m }