Skip to content

Support `custom` in `Binary` too

Currently custom is available in Json. A similar function would be useful for Binary. Basically something along the lines of:

val custom:
  <'a serialiser_type> ->
  <'a deserialiser_type> ->
  'a encoding

The type of serialisers could be as simple as 'a -> bytes (and the bytes would be blitted directly) or equivalently 'a -> unit8 list (where uint8 is a 0-255 integer).
Alternatively, we can "encourage" the use of the fixed endianess: (module type of TzEndian) -> 'a -> bytes
Alternatively, we can pass a more constraining set of functions: (module WRITER) -> 'a -> bytes where WRITER has a collection of functions like add_int8, add_int16, …, add_int64

For deserialisers, we can have type decoder_state = { offset : int; source : string; … } and then have decoder_state -> (decoder_state * 'a).
Alternatively simply string -> int -> (int * 'a)

Use case:

  • implementing Z and N as non-built-ins
  • UTF8

Additional considerations:

  • Needs to support errors. So there should be a way for the serialiser/deserialiser to return Error _.
  • We need to pass a name and description for the binary schema
  • We need to pass optional size and other such metadata info
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information