Stream
that can be written tocore :: Writer :: defaultinit
core :: Writer :: serialize_msgpack
Serializevalue
in MessagePack format
core :: Writer :: write_block
Write the length as a 64 bits integer, then the content oftext
core :: Writer :: write_bool
Write a booleanvalue
on a byte, using 0 for false
and 1 for true
core :: Writer :: write_bytes_from_cstring
Writelen
bytes from ns
core :: Writer :: write_double
Write a floating pointvalue
on 64 bits
core :: Writer :: write_int64
Writevalue
as a signed integer on 64 bits
core :: Writer :: write_msgpack_array
Write an array header forlen
items in the shortest possible MessagePack array format
core :: Writer :: write_msgpack_array16
Write an array header forlen
items, max of 0xFFFF items
core :: Writer :: write_msgpack_array32
Write an array header forlen
items, max of 0xFFFF_FFFF items
core :: Writer :: write_msgpack_bin
Writedata
in the shortest possible MessagePack bin format
core :: Writer :: write_msgpack_bin16
Writedata
in bin16 format, max of 0xFFFF bytes
core :: Writer :: write_msgpack_bin32
Writedata
in bin32 format, max of 0xFFFF_FFFF bytes
core :: Writer :: write_msgpack_bin8
Writedata
in bin8 format, max of 0xFF bytes
core :: Writer :: write_msgpack_bool
Writebool
in MessagePack format
core :: Writer :: write_msgpack_double
Writevalue
as a MessagePack double
core :: Writer :: write_msgpack_ext
Write an application-specific extension fortyp
and bytes
in the shortest possible MessagePack ext format
core :: Writer :: write_msgpack_ext16
Write the header for an application-specific extension oflen
data bytes
core :: Writer :: write_msgpack_ext32
Write the header for an application-specific extension oflen
data bytes
core :: Writer :: write_msgpack_ext8
Write the header for an application-specific extension oflen
data bytes
core :: Writer :: write_msgpack_fixarray
Write an array header forlen
items, max of 0x0F items
core :: Writer :: write_msgpack_fixext1
Write the header for an application-specific extension of one data bytecore :: Writer :: write_msgpack_fixext16
Write the header for an application-specific extension of 16 data bytescore :: Writer :: write_msgpack_fixext2
Write the header for an application-specific extension of two data bytescore :: Writer :: write_msgpack_fixext4
Write the header for an application-specific extension of 4 data bytescore :: Writer :: write_msgpack_fixext8
Write the header for an application-specific extension of 8 data bytescore :: Writer :: write_msgpack_fixint
Writevalue
as a single byte with metadata
core :: Writer :: write_msgpack_fixmap
Write a map header forlen
key/value pairs, max of 0x0F pairs
core :: Writer :: write_msgpack_fixstr
Writetext
in fixstr format, max of 0x1F bytes
core :: Writer :: write_msgpack_float
Writevalue
as a MessagePack float (losing precision)
core :: Writer :: write_msgpack_int
Write the integervalue
either as the shortest possible MessagePack int
core :: Writer :: write_msgpack_int16
Writevalue
over two signed bytes, following 1 metadata byte
core :: Writer :: write_msgpack_int32
Writevalue
over 4 signed bytes, following 1 metadata byte
core :: Writer :: write_msgpack_int64
Writevalue
over 8 signed bytes, following 1 metadata byte
core :: Writer :: write_msgpack_int8
Writevalue
over one signed byte, following 1 metadata byte
core :: Writer :: write_msgpack_map
Write a map header forlen
keys/value pairs in the shortest possible MessagePack map format
core :: Writer :: write_msgpack_map16
Write a map header forlen
key/value pairs, max of 0xFFFF pairs
core :: Writer :: write_msgpack_map32
Write a map header forlen
key/value pairs, max of 0xFFFF_FFFF pairs
core :: Writer :: write_msgpack_null
Writenull
, or nil, in MessagePack format
core :: Writer :: write_msgpack_str
Writetext
in the shortest possible MessagePack format
core :: Writer :: write_msgpack_str16
Writetext
in str16 format, max of 0xFFFF bytes
core :: Writer :: write_msgpack_str32
Writetext
in str32 format, max of 0xFFFF_FFFF bytes
core :: Writer :: write_msgpack_str8
Writetext
in str8 format, max of 0xFF bytes
core :: Writer :: write_msgpack_uint16
Writevalue
over two unsigned bytes, following 1 metadata byte
core :: Writer :: write_msgpack_uint32
Writevalue
over 4 unsigned bytes, following 1 metadata byte
core :: Writer :: write_msgpack_uint64
Writevalue
over 8 unsigned bytes, following 1 metadata byte
core :: Writer :: write_msgpack_uint8
Writevalue
over one unsigned byte, following 1 metadata byte
binary :: BinaryStream :: big_endian
Use the big-endian convention? otherwise use little-endian.binary :: BinaryStream :: big_endian=
Use the big-endian convention? otherwise use little-endian.core :: Object :: class_factory
Implementation used byget_class
to create the specific class.
core :: Writer :: defaultinit
binary :: BinaryStream :: defaultinit
core :: Stream :: defaultinit
core :: Object :: defaultinit
core :: Object :: is_same_instance
Return true ifself
and other
are the same instance (i.e. same identity).
core :: Object :: is_same_serialized
Isself
the same as other
in a serialization context?
core :: Object :: is_same_type
Return true ifself
and other
have the same dynamic type.
core :: Stream :: last_error=
Error produced by the file streamcore :: Stream :: lookahead=
Lookahead buffer for codecscore :: Stream :: lookahead_capacity
Capacity of the lookaheadcore :: Stream :: lookahead_capacity=
Capacity of the lookaheadcore :: Stream :: lookahead_length
Current occupation of the lookaheadcore :: Stream :: lookahead_length=
Current occupation of the lookaheadcore :: Object :: output_class_name
Display class name on stdout (debug only).core :: Writer :: serialize_msgpack
Serializevalue
in MessagePack format
core :: Writer :: write_block
Write the length as a 64 bits integer, then the content oftext
core :: Writer :: write_bool
Write a booleanvalue
on a byte, using 0 for false
and 1 for true
core :: Stream :: write_buffer
Buffer for writing data to a streamcore :: Stream :: write_buffer=
Buffer for writing data to a streamcore :: Writer :: write_bytes_from_cstring
Writelen
bytes from ns
core :: Writer :: write_double
Write a floating pointvalue
on 64 bits
core :: Writer :: write_int64
Writevalue
as a signed integer on 64 bits
core :: Writer :: write_msgpack_array
Write an array header forlen
items in the shortest possible MessagePack array format
core :: Writer :: write_msgpack_array16
Write an array header forlen
items, max of 0xFFFF items
core :: Writer :: write_msgpack_array32
Write an array header forlen
items, max of 0xFFFF_FFFF items
core :: Writer :: write_msgpack_bin
Writedata
in the shortest possible MessagePack bin format
core :: Writer :: write_msgpack_bin16
Writedata
in bin16 format, max of 0xFFFF bytes
core :: Writer :: write_msgpack_bin32
Writedata
in bin32 format, max of 0xFFFF_FFFF bytes
core :: Writer :: write_msgpack_bin8
Writedata
in bin8 format, max of 0xFF bytes
core :: Writer :: write_msgpack_bool
Writebool
in MessagePack format
core :: Writer :: write_msgpack_double
Writevalue
as a MessagePack double
core :: Writer :: write_msgpack_ext
Write an application-specific extension fortyp
and bytes
in the shortest possible MessagePack ext format
core :: Writer :: write_msgpack_ext16
Write the header for an application-specific extension oflen
data bytes
core :: Writer :: write_msgpack_ext32
Write the header for an application-specific extension oflen
data bytes
core :: Writer :: write_msgpack_ext8
Write the header for an application-specific extension oflen
data bytes
core :: Writer :: write_msgpack_fixarray
Write an array header forlen
items, max of 0x0F items
core :: Writer :: write_msgpack_fixext1
Write the header for an application-specific extension of one data bytecore :: Writer :: write_msgpack_fixext16
Write the header for an application-specific extension of 16 data bytescore :: Writer :: write_msgpack_fixext2
Write the header for an application-specific extension of two data bytescore :: Writer :: write_msgpack_fixext4
Write the header for an application-specific extension of 4 data bytescore :: Writer :: write_msgpack_fixext8
Write the header for an application-specific extension of 8 data bytescore :: Writer :: write_msgpack_fixint
Writevalue
as a single byte with metadata
core :: Writer :: write_msgpack_fixmap
Write a map header forlen
key/value pairs, max of 0x0F pairs
core :: Writer :: write_msgpack_fixstr
Writetext
in fixstr format, max of 0x1F bytes
core :: Writer :: write_msgpack_float
Writevalue
as a MessagePack float (losing precision)
core :: Writer :: write_msgpack_int
Write the integervalue
either as the shortest possible MessagePack int
core :: Writer :: write_msgpack_int16
Writevalue
over two signed bytes, following 1 metadata byte
core :: Writer :: write_msgpack_int32
Writevalue
over 4 signed bytes, following 1 metadata byte
core :: Writer :: write_msgpack_int64
Writevalue
over 8 signed bytes, following 1 metadata byte
core :: Writer :: write_msgpack_int8
Writevalue
over one signed byte, following 1 metadata byte
core :: Writer :: write_msgpack_map
Write a map header forlen
keys/value pairs in the shortest possible MessagePack map format
core :: Writer :: write_msgpack_map16
Write a map header forlen
key/value pairs, max of 0xFFFF pairs
core :: Writer :: write_msgpack_map32
Write a map header forlen
key/value pairs, max of 0xFFFF_FFFF pairs
core :: Writer :: write_msgpack_null
Writenull
, or nil, in MessagePack format
core :: Writer :: write_msgpack_str
Writetext
in the shortest possible MessagePack format
core :: Writer :: write_msgpack_str16
Writetext
in str16 format, max of 0xFFFF bytes
core :: Writer :: write_msgpack_str32
Writetext
in str32 format, max of 0xFFFF_FFFF bytes
core :: Writer :: write_msgpack_str8
Writetext
in str8 format, max of 0xFF bytes
core :: Writer :: write_msgpack_uint16
Writevalue
over two unsigned bytes, following 1 metadata byte
core :: Writer :: write_msgpack_uint32
Writevalue
over 4 unsigned bytes, following 1 metadata byte
core :: Writer :: write_msgpack_uint64
Writevalue
over 8 unsigned bytes, following 1 metadata byte
core :: Writer :: write_msgpack_uint8
Writevalue
over one unsigned byte, following 1 metadata byte
Process
on which stdout can be read and stdin can be written to like a Duplex
# A `Stream` that can be written to
abstract class Writer
super Stream
# Write bytes from `s`
fun write_bytes(s: Bytes) do write_bytes_from_cstring(s.items, s.length)
# Write `len` bytes from `ns`
fun write_bytes_from_cstring(ns: CString, len: Int) is abstract
# Write a string
fun write(s: Text) is abstract
# Write a single byte
fun write_byte(value: Int) is abstract
# Write a single char
fun write_char(c: Char) do
var ln = codec.add_char_to(c, write_buffer)
write_bytes_from_cstring(write_buffer, ln)
end
# Can the stream be used to write
fun is_writable: Bool is abstract
end
lib/core/stream.nit:521,1--545,3
redef abstract class Writer
super BinaryStream
# Write a boolean `value` on a byte, using 0 for `false` and 1 for `true`
fun write_bool(value: Bool) do write_byte if value then 1 else 0
# Write up to 8 `Bool` in a byte
#
# To be used with `BinaryReader::read_bits`.
#
# Ensure: `bits.length <= 8`
fun write_bits(bits: Bool...)
do
assert bits.length <= 8
var int = 0
for b in bits.length.times do
if bits[b] then int |= 1 << (7 - b)
end
write_byte int
end
# Write `text` as a null terminated string
#
# To be used with `Reader::read_string`.
#
# Require: `text` has no null bytes.
fun write_string(text: Text)
do
write text
write_byte 0x00
end
# Write the length as a 64 bits integer, then the content of `text`
#
# To be used with `Reader::read_block`.
#
# Compared to `write_string`, this method supports null bytes in `text`.
fun write_block(text: Text)
do
write_int64 text.byte_length
write text
end
# Write a floating point `value` on 32 bits
#
# Using this format may result in a loss of precision as it uses less bits
# than Nit `Float`.
fun write_float(value: Float)
do
for i in [0..4[ do write_byte value.float_byte_at(i, big_endian)
end
# Write a floating point `value` on 64 bits
fun write_double(value: Float)
do
for i in [0..8[ do write_byte value.double_byte_at(i, big_endian)
end
# Write `value` as a signed integer on 64 bits
#
# Using this format may result in a loss of precision as the length of a
# Nit `Int` may be more than 64 bits on some platforms.
fun write_int64(value: Int)
do
for i in [0..8[ do write_byte value.int64_byte_at(i, big_endian)
end
# TODO:
#
# fun write_int8
# fun write_uint8 # No need for this one, it is the current `read_char`
# fun write_int16
# fun write_uint16
# fun write_int32
# fun write_uint32
# fun write_uint64
# fun write_long_double?
end
lib/binary/binary.nit:69,1--148,3
redef class Writer
# Write `null`, or nil, in MessagePack format
fun write_msgpack_null do write_byte 0xC0
# Write `bool` in MessagePack format
fun write_msgpack_bool(bool: Bool)
do write_byte(if bool then 0xC3 else 0xC2)
# ---
# Integers
# Write the integer `value` either as the shortest possible MessagePack _int_
fun write_msgpack_int(value: Int)
do
if value >= -0x20 and value <= 0x7F then
write_msgpack_fixint value
else if value >= 0 then
if value <= 0xFF then
write_msgpack_uint8 value
else if value <= 0xFFFF then
write_msgpack_uint16 value
else if value <= 0xFFFF_FFFF then
write_msgpack_uint32 value
else #if value <= 0xFFFF_FFFF_FFFF_FFFF then
write_msgpack_uint64 value
end
else if value >= -128 then
write_msgpack_int8 value
else if value >= -32768 then
write_msgpack_int16 value
else if value >= -2147483648 then
write_msgpack_int32 value
else
write_msgpack_int64 value
end
end
# Write `value` as a single byte with metadata
#
# Require: `value >= -0x20 and value <= 0x7F`
fun write_msgpack_fixint(value: Int)
do
assert value >= -0x20 and value <= 0x7F
write_byte value
end
# Write `value` over one unsigned byte, following 1 metadata byte
#
# Require: `value >= 0x00 and value <= 0xFF`
fun write_msgpack_uint8(value: Int)
do
write_byte 0xCC
write_bytes value.to_bytes(n_bytes=1)
end
# Write `value` over two unsigned bytes, following 1 metadata byte
#
# Require: `value >= 0x00 and value <= 0xFFFF`
fun write_msgpack_uint16(value: Int)
do
write_byte 0xCD
write_bytes value.to_bytes(n_bytes=2)
end
# Write `value` over 4 unsigned bytes, following 1 metadata byte
#
# Require: `value >= 0x00 and value <= 0xFFFF_FFFF`
fun write_msgpack_uint32(value: Int)
do
write_byte 0xCE
write_bytes value.to_bytes(n_bytes=4)
end
# Write `value` over 8 unsigned bytes, following 1 metadata byte
#
# Require: `value >= 0x00 and value <= 0xFFFF_FFFF_FFFF_FFFF`
fun write_msgpack_uint64(value: Int)
do
write_byte 0xCF
write_bytes value.to_bytes(n_bytes=8)
end
# Write `value` over one signed byte, following 1 metadata byte
#
# Require: `value >= -128 and value <= 127`
fun write_msgpack_int8(value: Int)
do
write_byte 0xD0
write_bytes value.to_bytes(n_bytes=1)
end
# Write `value` over two signed bytes, following 1 metadata byte
fun write_msgpack_int16(value: Int)
do
write_byte 0xD1
write_bytes value.to_bytes(n_bytes=2)
end
# Write `value` over 4 signed bytes, following 1 metadata byte
fun write_msgpack_int32(value: Int)
do
write_byte 0xD2
write_bytes value.to_bytes(n_bytes=4)
end
# Write `value` over 8 signed bytes, following 1 metadata byte
fun write_msgpack_int64(value: Int)
do
write_byte 0xD3
write_int64 value
end
# ---
# Floats
# Write `value` as a MessagePack float (losing precision)
fun write_msgpack_float(value: Float)
do
write_byte 0xCA
write_float value
end
# Write `value` as a MessagePack double
fun write_msgpack_double(value: Float)
do
write_byte 0xCB
write_double value
end
# ---
# Strings
# Write `text` in the shortest possible MessagePack format
#
# Require: `text.byte_length <= 0xFFFF_FFFF`
fun write_msgpack_str(text: Text)
do
var len = text.byte_length
if len <= 0x1F then
write_msgpack_fixstr text
else if len <= 0xFF then
write_msgpack_str8 text
else if len <= 0xFFFF then
write_msgpack_str16 text
else if len <= 0xFFFF_FFFF then
write_msgpack_str32 text
else
abort
end
end
# Write `text` in _fixstr_ format, max of 0x1F bytes
#
# Require: `text.byte_length <= 0x1F`
fun write_msgpack_fixstr(text: Text)
do
var len = text.byte_length
assert len <= 0x1F
var b = 0b1010_0000 | len
write_byte b
write text
end
# Write `text` in _str8_ format, max of 0xFF bytes
#
# Require: `text.byte_length <= 0xFF`
fun write_msgpack_str8(text: Text)
do
var len = text.byte_length
assert len <= 0xFF
write_byte 0xD9
write_byte len
write text
end
# Write `text` in _str16_ format, max of 0xFFFF bytes
#
# Require: `text.byte_length <= 0xFFFF`
fun write_msgpack_str16(text: Text)
do
var len = text.byte_length
assert len <= 0xFFFF
write_byte 0xDA
var len_bytes = len.to_bytes
write_byte len_bytes[0]
write_byte if len_bytes.length > 1 then len_bytes[1] else 0
write text
end
# Write `text` in _str32_ format, max of 0xFFFF_FFFF bytes
#
# Require: `text.byte_length <= 0xFFFF_FFFF`
fun write_msgpack_str32(text: Text)
do
var len = text.byte_length
assert len <= 0xFFFF_FFFF
write_byte 0xDB
var len_bytes = len.to_bytes
write_byte len_bytes[0]
for i in [1..4[ do
write_byte if len_bytes.length > i then len_bytes[i] else 0
end
write text
end
# ---
# Binary data
# Write `data` in the shortest possible MessagePack _bin_ format
#
# Require: `data.length <= 0xFFFF_FFFF`
fun write_msgpack_bin(data: Bytes)
do
var len = data.length
if len <= 0xFF then
write_msgpack_bin8 data
else if len <= 0xFFFF then
write_msgpack_bin16 data
else if len <= 0xFFFF_FFFF then
write_msgpack_bin32 data
else abort
end
# Write `data` in _bin8_ format, max of 0xFF bytes
#
# Require: `data.length <= 0xFF`
fun write_msgpack_bin8(data: Bytes)
do
var len = data.length
assert len <= 0xFF
write_byte 0xC4
write_byte len
write_bytes data
end
# Write `data` in _bin16_ format, max of 0xFFFF bytes
#
# Require: `data.length <= 0xFFFF`
fun write_msgpack_bin16(data: Bytes)
do
var len = data.length
assert len <= 0xFFFF
write_byte 0xC5
write_bytes len.to_bytes(n_bytes=2)
write_bytes data
end
# Write `data` in _bin32_ format, max of 0xFFFF_FFFF bytes
#
# Require: `data.length <= 0xFFFF_FFFF`
fun write_msgpack_bin32(data: Bytes)
do
var len = data.length
assert len <= 0xFFFF_FFFF
write_byte 0xC6
write_bytes len.to_bytes(n_bytes=4)
write_bytes data
end
# ---
# Arrays
# Write an array header for `len` items in the shortest possible MessagePack _array_ format
#
# After writing the header, clients should write the array items.
#
# Require: `len <= 0xFFFF_FFFF`
fun write_msgpack_array(len: Int)
do
if len <= 0x0F then
write_msgpack_fixarray len
else if len <= 0xFFFF then
write_msgpack_array16 len
else if len <= 0xFFFF_FFFF then
write_msgpack_array32 len
else
abort
end
end
# Write an array header for `len` items, max of 0x0F items
#
# After writing the header, clients should write the array items.
#
# Require: `len <= 0x0F`
fun write_msgpack_fixarray(len: Int)
do
assert len <= 0x0F
write_byte 0b1001_0000 | len
end
# Write an array header for `len` items, max of 0xFFFF items
#
# After writing the header, clients should write the array items.
#
# Require: `len <= 0xFFFF`
fun write_msgpack_array16(len: Int)
do
assert len <= 0xFFFF
write_byte 0xDC
write_bytes len.to_bytes(n_bytes=2)
end
# Write an array header for `len` items, max of 0xFFFF_FFFF items
#
# After writing the header, clients should write the array items.
#
# Require: `len <= 0xFFFF_FFFF`
fun write_msgpack_array32(len: Int)
do
assert len <= 0xFFFF_FFFF
write_byte 0xDD
write_bytes len.to_bytes(n_bytes=4)
end
# ---
# Map
# Write a map header for `len` keys/value pairs in the shortest possible MessagePack _map_ format
#
# After writing the header, clients should write the map data, alternating
# between keys and values.
#
# Require: `len <= 0xFFFF_FFFF`
fun write_msgpack_map(len: Int)
do
if len <= 0x0F then
write_msgpack_fixmap len
else if len <= 0xFFFF then
write_msgpack_map16 len
else if len <= 0xFFFF_FFFF then
write_msgpack_map32 len
else
abort
end
end
# Write a map header for `len` key/value pairs, max of 0x0F pairs
#
# After writing the header, clients should write the map data, alternating
# between keys and values.
#
# Require: `len <= 0x0F`
fun write_msgpack_fixmap(len: Int)
do
assert len <= 0x0F
write_byte 0b1000_0000 | len
end
# Write a map header for `len` key/value pairs, max of 0xFFFF pairs
#
# After writing the header, clients should write the map data, alternating
# between keys and values.
#
# Require: `len <= 0xFFFF`
fun write_msgpack_map16(len: Int)
do
assert len <= 0xFFFF
write_byte 0xDE
write_bytes len.to_bytes(n_bytes=2)
end
# Write a map header for `len` key/value pairs, max of 0xFFFF_FFFF pairs
#
# After writing the header, clients should write the map data, alternating
# between keys and values.
#
# Require: `len <= 0xFFFF_FFFF`
fun write_msgpack_map32(len: Int)
do
assert len <= 0xFFFF_FFFF
write_byte 0xDF
write_bytes len.to_bytes(n_bytes=4)
end
# ---
# Ext
# Write an application-specific extension for `typ` and `bytes` in the shortest possible MessagePack _ext_ format
#
# Require: `bytes.length <= 0xFFFF_FFFF`
#
# ~~~
# var writer = new BytesWriter
# writer.write_msgpack_ext(0x0A, b"\x0B\x0C\x0D")
# assert writer.bytes == b"\xC7\x03\x0A\x0B\x0C\x0D"
# ~~~
fun write_msgpack_ext(typ: Int, bytes: Bytes)
do
var len = bytes.length
if len == 1 then
write_msgpack_fixext1 typ
write_byte bytes.first
else if len == 2 then
write_msgpack_fixext2 typ
write_bytes bytes
else if len == 4 then
write_msgpack_fixext4 typ
write_bytes bytes
else if len == 8 then
write_msgpack_fixext8 typ
write_bytes bytes
else if len == 16 then
write_msgpack_fixext16 typ
write_bytes bytes
else if len <= 0xFF then
write_msgpack_ext8(typ, len)
write_bytes bytes
else if len <= 0xFFFF then
write_msgpack_ext16(typ, len)
write_bytes bytes
else if len <= 0xFFFF_FFFF then
write_msgpack_ext32(typ, len)
write_bytes bytes
else
abort
end
end
# Write the header for an application-specific extension of one data byte
#
# After writing the header, clients should write the data byte.
fun write_msgpack_fixext1(typ: Int)
do
write_byte 0xD4
write_byte typ
end
# Write the header for an application-specific extension of two data bytes
#
# After writing the header, clients should write the two data bytes.
fun write_msgpack_fixext2(typ: Int)
do
write_byte 0xD5
write_byte typ
end
# Write the header for an application-specific extension of 4 data bytes
#
# After writing the header, clients should write the 4 data bytes.
fun write_msgpack_fixext4(typ: Int)
do
write_byte 0xD6
write_byte typ
end
# Write the header for an application-specific extension of 8 data bytes
#
# After writing the header, clients should write the 8 data bytes.
fun write_msgpack_fixext8(typ: Int)
do
write_byte 0xD7
write_byte typ
end
# Write the header for an application-specific extension of 16 data bytes
#
# After writing the header, clients should write the 16 data bytes.
fun write_msgpack_fixext16(typ: Int)
do
write_byte 0xD8
write_byte typ
end
# Write the header for an application-specific extension of `len` data bytes
#
# After writing the header, clients should write the data bytes.
#
# Require: `len >= 0 and <= 0xFF`
fun write_msgpack_ext8(typ, len: Int)
do
assert len >= 0 and len <= 0xFF
write_byte 0xC7
write_byte len
write_byte typ
end
# Write the header for an application-specific extension of `len` data bytes
#
# After writing the header, clients should write the data bytes.
#
# Require: `len >= 0 and <= 0xFFFF`
fun write_msgpack_ext16(typ, len: Int)
do
assert len >= 0 and len <= 0xFFFF
write_byte 0xC8
write_bytes len.to_bytes(n_bytes=2)
write_byte typ
end
# Write the header for an application-specific extension of `len` data bytes
#
# After writing the header, clients should write the data bytes.
#
# Require: `len >= 0 and <= 0xFFFF_FFFF`
fun write_msgpack_ext32(typ, len: Int)
do
assert len >= 0 and len <= 0xFFFF_FFFF
write_byte 0xC9
write_bytes len.to_bytes(n_bytes=4)
write_byte typ
end
# TODO timestamps
end
lib/msgpack/write.nit:20,1--533,3
redef class Writer
# Serialize `value` in MessagePack format
fun serialize_msgpack(value: nullable Serializable, plain: nullable Bool)
do
var serializer = new MsgPackSerializer(self)
serializer.plain_msgpack = plain or else false
serializer.serialize value
end
end
lib/msgpack/serialization_write.nit:164,1--172,3