diff --git a/attribute.go b/attribute.go index 69610f9..412a430 100644 --- a/attribute.go +++ b/attribute.go @@ -303,7 +303,54 @@ func (e *AttributeEncoder) Encode(attribute string, value interface{}) error { } } default: - return fmt.Errorf("type %T is not supported", value) + if tag != TagBeginCollection { + return fmt.Errorf("type %T is not supported", value) + } + + if err := e.encodeTag(TagBeginCollection); err != nil { + return err + } + + if err := e.encodeString(attribute); err != nil { + return err + } + + if err := e.writeNullByte(); err != nil { + return err + } + + for member, value := range value.(map[string]interface{}) { + if err := e.encodeTag(TagMemberName); err != nil { + return err + } + if err := e.writeNullByte(); err != nil { + return err + } + if err := e.encodeString(member); err != nil { + return err + } + if err := e.encodeTag(TagKeyword); err != nil { + return err + } + if err := e.writeNullByte(); err != nil { + return err + } + if err := e.encodeString(value.(string)); err != nil { + return err + } + } + + if err := e.encodeTag(TagEndCollection); err != nil { + return err + } + + if err := e.writeNullByte(); err != nil { + return err + } + + if err := e.writeNullByte(); err != nil { + return err + } } return nil diff --git a/constants.go b/constants.go index 31c8b29..e6e1a02 100644 --- a/constants.go +++ b/constants.go @@ -353,6 +353,7 @@ const ( AttributeNumberOfDocuments = "number-of-documents" AttributeJobOriginatingUserName = "job-originating-user-name" AttributeOutputOrder = "outputorder" + AttributeMediaCol = "media-col" ) // Default attributes @@ -416,5 +417,6 @@ var ( AttributeStatusMessage: TagText, AttributeLimit: TagInteger, AttributeOutputOrder: TagName, + AttributeMediaCol: TagBeginCollection, } )