Document static, make anyint standard
Gajumaru Serialization Tests / tests (push) Successful in 49m9s
Gajumaru Serialization Tests / tests (push) Successful in 49m9s
This commit is contained in:
@@ -2,6 +2,8 @@
|
||||
|
||||
Serialization helpers for the Gajumaru.
|
||||
|
||||
For an overview of the static serializer, see [this document](doc/static.md).
|
||||
|
||||
## Build
|
||||
|
||||
$ rebar3 compile
|
||||
@@ -30,6 +32,7 @@ how the type information is represented. The fully serialized form is
|
||||
produced by the `serialize` functions.
|
||||
|
||||
The basic types supported by the encoder are:
|
||||
* `integer()` (`anyint`, code: 246)
|
||||
* `neg_integer()` (`negint`, code: 247)
|
||||
* `non_neg_integer()` (`int` , code: 248)
|
||||
* `binary()` (`binary`, code: 249)
|
||||
@@ -40,6 +43,9 @@ The basic types supported by the encoder are:
|
||||
* `gmser_id:id()` (`id` , code: 254)
|
||||
* `atom()` (`label` , code: 255)
|
||||
|
||||
(The range of codes is chosen because the `gmser_chain_objects` codes
|
||||
range from 10 to 200, and also to stay within 1 byte.)
|
||||
|
||||
When encoding `map` types, the map elements are first sorted.
|
||||
|
||||
When specifying a map type for template-driven encoding, use
|
||||
@@ -122,8 +128,17 @@ to encode as each type in the list, in the specified order, until one matches.
|
||||
gmser_dyn:encode_typed(#{alt => [negint,int]}, 5) -> [<<0>>,<<1>>,[<<247>>,<<5>>]]
|
||||
gmser_dyn:encode_typed(#{alt => [negint,int]}, 5) -> [<<0>>,<<1>>,[<<248>>,<<5>>]]
|
||||
|
||||
gmser_dyn:register_type(246, anyint, #{alt => [negint, int]})
|
||||
|
||||
gmser_dyn:encode_typed(anyint,-5) -> [<<0>>,<<1>>,[<<246>>,[<<247>>,<<5>>]]]
|
||||
gmser_dyn:encode_typed(anyint,5) -> [<<0>>,<<1>>,[<<246>>,[<<248>>,<<5>>]]]
|
||||
```
|
||||
|
||||
### Notes
|
||||
|
||||
Note that `anyint` is a standard type. The static serializer supports only
|
||||
positive integers (`int`), as negative numbers are forbidden on-chain.
|
||||
For dynamic encoding e.g. in messaging protocols, handling negative numbers can
|
||||
be useful, so the `negint` type was added as a dynamic type. To encode a full-range
|
||||
integer, the `alt` construct is needed.
|
||||
|
||||
(Floats are not supported, as they are non-deterministic. Rationals and fixed-point
|
||||
numbers could easily be handled as high-level types, e.g. as `{int,int}`.)
|
||||
|
||||
Reference in New Issue
Block a user