TypedMessage binary format
Status: This format has not been shipped to production yet. It might change at any time.
Abstract
This is a binary format that is used to represent a rich document (text, images, ...etc).
Encoding
Following the encoding convention of Payload37.
Document type
This is the top-most data type.
type Document = [version: Integer, ...Any]
- When
versionis0:- This is a
TypedMessageText. - It should be parsed in the following way:
- This is a
type Document = [version: 0, text: String, meta?: Map | Nil]
- When
versionis1:- The rest of the fields are
TypedMessage. - It should be parsed in the following way:
- The rest of the fields are
type Document = [version: 1, ...TypedMessage]
function parse(doc: Array<any>) {
// drop the version field, and treat the rest as a TypedMessage
if (doc[0] === 1) return parseTypedMessage(doc.slice(1))
}
TypedMessage
All TypedMessage must start with the following fields:
type TypedMessageBase = [
type: TypedMessageTypeEnum | String,
version: Integer,
metadata: Map | Nil,
...rest: Array<Any>,
]
enum TypedMessageTypeEnum {
Tuple = 0,
Text = 1,
}
type field
This field represents the type of this TypedMessage.
It is a TypedMessageTypeEnum or a UTF-8 string.
When it is TypedMessageTypeEnum, it represents a well-known TypedMessage defined in this specification.
When it is a String, it represents a custom extension of TypedMessage.
An implementation MAY ignore an unknown type or render a hint.
version
This field represents the version of this TypedMessage contains.
metadata
This field represents the metadata this TypedMessage contains.
An implementation MUST NOT assume the data structure inside the metadata.
TypedMessageText
type TypedMessageText = [
//
type: TypedMessageTypeEnum.Text,
metadata: Map | Nil,
content: String,
textFormat?: TextFormat,
]
enum TextFormat {
PlainText = 0,
Markdown = 1,
}
content field
This field represents a text message. The interpretation of content depends on the textFormat field.
textFormat field
This is an optional field that represents the interpretation of the content field.
PlainText means it is plain text.
Markdown means it is a Markdown. The Markdown flavor is not specified so the rendering effect might be different depending on the library.
When decoding, the lack of content field should be treated as TextFormat.PlainText
TypedMessageTuple
type TypedMessageTuple = [
type: TypedMessageTypeEnum.Tuple
metadata: Map | Nil,
items: Array<TypedMessageBase>,
]