Skip to content

Commit 7f30177

Browse files
committed
Add spec for ObjectMessage encoding and decoding
Also improves the phrasing used for some of the related
1 parent 59b42e9 commit 7f30177

1 file changed

Lines changed: 40 additions & 8 deletions

File tree

textile/features.textile

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1518,6 +1518,8 @@ h4. ObjectMessage
15181518
** @(OM3d)@ The size of the @extras@ property is the string length of its JSON representation
15191519
** @(OM3f)@ The size of the @clientId@ property is its string length
15201520
** @(OM3e)@ The size of a @null@ or omitted property is zero
1521+
* @(OM4)@ For @ObjectMessage@ encoding see @ObjectData@ "OD4":#OD4 and @ObjectOperation@ "OOP5":#OOP5 encoding
1522+
* @(OM5)@ For @ObjectMessage@ decoding see @ObjectData@ "OD5":#OD5 decoding
15211523

15221524
h4. ObjectOperation
15231525

@@ -1530,16 +1532,23 @@ h4. ObjectOperation
15301532
** @(OOP3d)@ @counterOp@ @CounterOp@ object - the payload for the operation if it is an operation on a @Counter@ object type
15311533
** @(OOP3e)@ @map@ @Map@ object - the payload for the operation if the operation is @MAP_CREATE@. Defines the initial value for the @Map@ object
15321534
** @(OOP3f)@ @counter@ @Counter@ object - the payload for the operation if the operation is @COUNTER_CREATE@. Defines the initial value for the @Counter@ object
1533-
** @(OOP3g)@ @nonce@ string - the nonce, must be present on @COUNTER_CREATE@ and @MAP_CREATE@ operations sent to the server
1534-
** @(OOP3h)@ @initialValue@ binary - the initial value bytes for the object
1535-
** @(OOP3i)@ @initialValueEncoding@ string - defines how the @initialValue@ should be interpreted. Should be @msgpack@ or @json@
1535+
** @(OOP3g)@ @nonce@ string - the nonce. Must be present on @COUNTER_CREATE@ and @MAP_CREATE@ operations sent to the server. Should not be accessed by the client library if received from the server
1536+
** @(OOP3h)@ @initialValue@ binary - the initial value bytes for the object. Must be present on @COUNTER_CREATE@ and @MAP_CREATE@ operations sent to the server. Should not be accessed by the client library if received from the server
1537+
** @(OOP3i)@ @initialValueEncoding@ string - defines how the @initialValue@ should be interpreted by the server. Must be @msgpack@ or @json@. Must be present on @COUNTER_CREATE@ and @MAP_CREATE@ operations sent to the server. Should not be accessed by the client library if received from the server
15361538
* @(OOP4)@ The size of the @ObjectOperation@ is calculated as follows:
15371539
** @(OOP4a)@ The size is the sum of the sizes of the @mapOp@, @counterOp@, @map@, and @counter@ properties
15381540
** @(OOP4b)@ The size of the @mapOp@ property is calculated per "MOP3":#MOP3
15391541
** @(OOP4c)@ The size of the @counterOp@ property is calculated per "COP3":#COP3
15401542
** @(OOP4d)@ The size of the @map@ property is calculated per "MAP4":#MAP4
15411543
** @(OOP4e)@ The size of the @counter@ property is calculated per "CNT3":#CNT3
15421544
** @(OOP4f)@ The size of a @null@ or omitted property is zero
1545+
* @(OOP5)@ @ObjectOperation@ encoding:
1546+
** @(OOP5a)@ When the MessagePack protocol is used:
1547+
*** @(OOP5a1)@ A binary @ObjectOperation.initialValue@ is encoded as a MessagePack binary type
1548+
*** @(OOP5a2)@ Set @ObjectOperation.initialValueEncoding@ to @msgpack@
1549+
** @(OOP5b)@ When the JSON protocol is used:
1550+
*** @(OOP5b1)@ A binary @ObjectOperation.initialValue@ is Base64-encoded and represented as a JSON string
1551+
*** @(OOP5b2)@ Set @ObjectOperation.initialValueEncoding@ to @json@
15431552

15441553
h4. ObjectState
15451554

@@ -1618,18 +1627,41 @@ h4. ObjectData
16181627
* @(OD1)@ An @ObjectData@ represents a value in an object on a channel
16191628
* @(OD2)@ The attributes available in an @ObjectData@ are:
16201629
** @(OD2a)@ @objectId@ string - a reference to another object
1621-
** @(OD2b)@ @encoding@ string - can be set by the client to indicate that value in @string@ or @bytes@ field have an encoding
1622-
** @(OD2c)@ @boolean@ boolean - a primitive boolean leaf value in the object graph. Only one of the value fields - @boolean@, @bytes@, @number@ or @string@ - can be set at a time
1623-
** @(OD2d)@ @bytes@ binary - a primitive binary leaf value in the object graph. Only one of the value fields - @boolean@, @bytes@, @number@ or @string@ - can be set at a time
1624-
** @(OD2e)@ @number@ number - a primitive number leaf value in the object graph. Only one of the value fields - @boolean@, @bytes@, @number@ or @string@ - can be set at a time
1625-
** @(OD2f)@ @string@ string - a primitive string leaf value in the object graph. Only one of the value fields - @boolean@, @bytes@, @number@ or @string@ - can be set at a time
1630+
** @(OD2b)@ @encoding@ string - may be set by the client library to indicate that value in @string@ field have an encoding
1631+
** @(OD2c)@ @boolean@ boolean - a primitive boolean leaf value in the object graph. Only one of the value fields - @boolean@, @bytes@, @number@ or @string@ - must be set at a time
1632+
** @(OD2d)@ @bytes@ binary - a primitive binary leaf value in the object graph. Only one of the value fields - @boolean@, @bytes@, @number@ or @string@ - must be set at a time
1633+
** @(OD2e)@ @number@ number - a primitive number leaf value in the object graph. Only one of the value fields - @boolean@, @bytes@, @number@ or @string@ - must be set at a time
1634+
** @(OD2f)@ @string@ string - a primitive string leaf value in the object graph. Only one of the value fields - @boolean@, @bytes@, @number@ or @string@ - must be set at a time
16261635
* @(OD3)@ The size of the @ObjectData@ is calculated as follows:
16271636
** @(OD3a)@ The size is the sum of the sizes of the @boolean@, @bytes@, @number@, and @string@ properties
16281637
** @(OD3b)@ If set, the size of a @boolean@ property is 1
16291638
** @(OD3c)@ If set, the size of a @bytes@ property is its size in bytes (of the actual binary, not the base64 representation, regardless of whether the binary protocol is in use)
16301639
** @(OD3d)@ If set, the size of a @number@ property is 8
16311640
** @(OD3e)@ If set, the size of a @string@ property is its length
16321641
** @(OD3f)@ The size of a @null@ or omitted property is zero
1642+
* @(OD4)@ @ObjectData@ encoding:
1643+
** @(OD4a)@ Payloads must be booleans, binary, numbers, strings, or objects capable of JSON representation. Any other data type must not be permitted and result in an error with code 40013
1644+
** @(OD4b)@ @ObjectData.encoding@ must be left unset unless specified otherwise by the payload encoding procedure in "OD4c":#OD4c and "OD4d":#OD4d
1645+
** @(OD4c)@ When the MessagePack protocol is used:
1646+
*** @(OD4c1)@ A boolean payload is encoded as a MessagePack boolean type, and the result is set on the @ObjectData.boolean@ attribute
1647+
*** @(OD4c2)@ A binary payload is encoded as a MessagePack binary type, and the result is set on the @ObjectData.bytes@ attribute
1648+
*** @(OD4c3)@ A number payload is encoded as a MessagePack number type, and the result is set on the @ObjectData.number@ attribute
1649+
*** @(OD4c4)@ A string payload is encoded as a MessagePack string type, and the result is set on the @ObjectData.string@ attribute
1650+
*** @(OD4c5)@ A payload consisting of an object capable of JSON representation is stringified as either a JSON object or array, encoded as a MessagePack string type, and the result is set on the @ObjectData.string@ attribute. The @ObjectData.encoding@ attribute is then set to "json"
1651+
** @(OD4d)@ When the JSON protocol is used:
1652+
*** @(OD4d1)@ A boolean payload is represented as a JSON boolean and set on the @ObjectData.boolean@ attribute
1653+
*** @(OD4d2)@ A binary payload is Base64-encoded and represented as a JSON string; the result is set on the @ObjectData.bytes@ attribute
1654+
*** @(OD4d3)@ A number payload is represented as a JSON number and set on the @ObjectData.number@ attribute
1655+
*** @(OD4d4)@ A string payload is represented as a JSON string and set on the @ObjectData.string@ attribute
1656+
*** @(OD4d5)@ A payload consisting of an object capable of JSON representation is stringified as either a JSON object or array, represented as a JSON string and the result is set on the @ObjectData.string@ attribute. The @ObjectData.encoding@ attribute is then set to "json"
1657+
* @(OD5)@ @ObjectData@ decoding:
1658+
** @(OD5a)@ When the MessagePack protocol is used:
1659+
*** @(OD5a1)@ The payloads in @ObjectData.boolean@, @ObjectData.bytes@, @ObjectData.number@, and @ObjectData.string@ are decoded as their corresponding MessagePack types
1660+
*** @(OD5a2)@ If @ObjectData.encoding@ is set to "json", the @ObjectData.string@ content is decoded by parsing the string as JSON
1661+
** @(OD5b)@ When the JSON protocol is used:
1662+
*** @(OD5b1)@ The payloads in @ObjectData.boolean@, @ObjectData.number@, and @ObjectData.string@ are decoded as their corresponding JSON types
1663+
*** @(OD5b2)@ The @ObjectData.bytes@ payload is Base64-decoded into a binary value
1664+
*** @(OD5b3)@ If @ObjectData.encoding@ is set to "json", the @ObjectData.string@ content is decoded by parsing the string as JSON
16331665

16341666
h4. Annotation
16351667

0 commit comments

Comments
 (0)