On this page:
read-uint*
write-uint*
read-sint*
write-sint*
read-int*
write-int*
read-bool
write-bool
read-fixed32
read-fixed64
write-fixed32
write-fixed64
read-sfixed32
read-sfixed64
write-sfixed32
write-sfixed64
read-float
read-double
write-float
write-double
read-sized-bytes
write-sized-bytes
read-sized-string
write-sized-string
read-sized
write-sized
read-tag/ type
write-tag/ type
type/ c
Version: 5.2.1

3 Encoding

 (require (planet murphy/protobuf/encoding))
Low-level functions dealing with the binary wire format of protocol buffers.

(read-uint* [in max-size])
  (or/c exact-nonnegative-integer? eof-object?)
  in : input-port? = (current-input-port)
  max-size : (or/c exact-positive-integer? #f) = 10
(write-uint* n [out max-size])  void?
  n : exact-nonnegative-integer?
  out : output-port? = (current-output-port)
  max-size : (or/c exact-positive-integer? #f) = 10
Read/write a variable length unsigned integer. If max-size is not false, it defines the maximum number of bytes that the encoded number may use.

(read-sint* [in max-size])  (or/c exact-integer? eof-object?)
  in : input-port? = (current-input-port)
  max-size : (or/c exact-positive-integer? #f) = 10
(write-sint* i [out max-size])  void?
  i : exact-integer?
  out : output-port? = (current-output-port)
  max-size : (or/c exact-positive-integer? #f) = 10
Read/write a variable length signed integer in zigzag encoding. If max-size is not false, it defines the maximum number of bytes that the encoded number may use.

(read-int* [in])  (or/c exact-integer? eof-object?)
  in : input-port? = (current-input-port)
(write-int* i [out])  void?
  i : exact-integer?
  out : output-port? = (current-output-port)
Read/write a variable length signed integer in tows-complement encoding. The maximum number of bytes used by the encoded number is 10, the maximum bit length of the number is 64.

(read-bool [in])  (or/c bool? eof-object?)
  in : input-port? = (current-input-port)
(write-bool v [out])  void?
  v : any/c
  out : output-port? = (current-output-port)
Read/write a boolean as a one byte integer.

(read-fixed32 [in])
  (or/c exact-nonnegative-integer? eof-object?)
  in : input-port? = (current-input-port)
(read-fixed64 [in])
  (or/c exact-nonnegative-integer? eof-object?)
  in : input-port? = (current-input-port)
(write-fixed32 n [out])  void?
  n : exact-nonnegative-integer?
  out : output-port? = (current-output-port)
(write-fixed64 n [out])  void?
  n : exact-nonnegative-integer?
  out : output-port? = (current-output-port)
Read/write unsigned integers as fixed length 32/64-bit values with little endian byte order.

(read-sfixed32 [in])  (or/c exact-integer? eof-object?)
  in : input-port? = (current-input-port)
(read-sfixed64 [in])  (or/c exact-integer? eof-object?)
  in : input-port? = (current-input-port)
(write-sfixed32 i [out])  void?
  i : exact-integer?
  out : output-port? = (current-output-port)
(write-sfixed64 i [out])  void?
  i : exact-integer?
  out : output-port? = (current-output-port)
Read/write signed integers as fixed length 32/64-bit values in twos-complement encoding with little endian byte order.

(read-float [in])  (or/c real? eof-object?)
  in : input-port? = (current-input-port)
(read-double [in])  (or/c real? eof-object?)
  in : input-port? = (current-input-port)
(write-float x [out])  void?
  x : real?
  out : output-port? = (current-output-port)
(write-double x [out])  void?
  x : real?
  out : output-port? = (current-output-port)
Read/write real numbers as fixed length 32/64-bit IEEE floating point values with little endian byte order.

(read-sized-bytes [in])  (or/c bytes? eof-object?)
  in : input-port? = (current-input-port)
(write-sized-bytes bstr [out])  void?
  bstr : bytes?
  out : output-port? = (current-output-port)
Read/write a byte string with size prefix. The size is read and written using read-uint* and write-uint*.

(read-sized-string [in])  (or/c string? eof-object?)
  in : input-port? = (current-input-port)
(write-sized-string str [out])  void?
  str : string?
  out : output-port? = (current-output-port)
Read/write a UTF-8 encoded string with size prefix. The size in bytes is read and written using read-uint* and write-uint*.

(read-sized read [in])  any/c
  read : (-> input-port? any/c)
  in : input-port? = (current-input-port)
(write-sized write v [out])  any
  write : (-> any/c output-port? any)
  v : any/c
  out : output-port? = (current-output-port)
Read/write any object with size prefix. The size in bytes is read and written using read-uint* and write-uint*.

On input, read is called on an input port limited according to the size prefix. On output, write is called on v and a byte string output port; the buffered output’s length is then written to the actual output port.

(read-tag/type [in])
  
(or/c tag/c eof-object?)
(or/c exact-nonnegative-integer? eof-object?)
  in : input-port? = (current-input-port)
(write-tag/type tag type [out])  void?
  tag : tag/c
  type : exact-nonnegative-integer?
  out : output-port? = (current-output-port)
Read/write the tag and type of a protocol buffer message field.

type/c : flat-contract?
Contract matching any of the protocol buffer message field wire type enumeration items:
  • 'int*: The field value is encoded as a variable length integer.

  • '64bit: The field value is always encoded in 64 bits.

  • '32bit: The field value is always encoded in 32 bits.

  • 'sized: The field value is encoded with a byte size prefix.