Purpose
Complete API reference for the MessagePack Ruby library.
Module: Messagepack
pack(value, io = nil)
Serialize a Ruby object to MessagePack binary format.
Messagepack.pack(value) => binary_string
Messagepack.pack(value, io) => nil
-
value - The Ruby object to serialize
-
io - Optional IO object to write to
-
Returns - Binary string if no IO, nil if writing to IO
binary = Messagepack.pack({hello: "world"})
File.open("data.msgpack", "wb") { |f| Messagepack.pack(data, f) }
unpack(data, options = {})
Deserialize MessagePack binary to a Ruby object.
Messagepack.unpack(data) => object
Messagepack.unpack(io) => object
-
data - Binary string or IO object
-
options - Hash of options:
-
Returns - The deserialized Ruby object
obj = Messagepack.unpack("\x81\xA5hello\xA5world")
obj = Messagepack.unpack(file)
obj = Messagepack.unpack(data, symbolize_keys: true)
Class: Messagepack::Factory
new()
Create a new factory instance.
factory = Messagepack::Factory.new
register_type(type_id, class, packer:, unpacker:, recursive: false)
Register a custom extension type.
factory.register_type(0x01, MyClass,
packer: :to_msgpack_ext,
unpacker: :from_msgpack_ext
)
factory.register_type(0x02, MyContainer,
packer: ->(obj, pk) { pk.write(obj.to_h) },
unpacker: ->(up) { MyContainer.from_hash(up.read) },
recursive: true
)
-
type_id - Integer from -128 to 127
-
class - Ruby class to register
-
packer - Symbol, method, or proc for serialization
-
unpacker - Symbol, method, or proc for deserialization
-
recursive - Enable recursive packing (default: false)
packer()
Create a new packer instance.
unpacker()
Create a new unpacker instance.
unpacker = factory.unpacker
pack(value, io = nil)
Pack a value using this factory.
binary = factory.pack(value)
factory.pack(value, io)
unpack(data, options = {})
Unpack data using this factory.
obj = factory.unpack(data)
pool(size = 4)
Create a thread-safe pool.
pool = factory.pool(10)
data = pool.pack(object)
obj = pool.unpack(binary)
freeze()
Freeze the factory for thread safety.
Class: Messagepack::Packer
write(value)
Write a value to the buffer.
packer.write(nil)
packer.write(42)
packer.write("hello")
packer.write([1, 2, 3])
packer.write({a: 1})
to_s
Get the packed binary data.
Write an array header for streaming.
packer.write_array_header(3)
packer.write(1)
packer.write(2)
packer.write(3)
Write a map header for streaming.
packer.write_map_header(2)
packer.write("key1")
packer.write("value1")
packer.write("key2")
packer.write("value2")
Class: Messagepack::Unpacker
new(io = nil, options = {})
unpacker = Messagepack::Unpacker.new
unpacker = Messagepack::Unpacker.new(io)
unpacker = Messagepack::Unpacker.new(symbolize_keys: true)
feed(data)
unpacker.feed(partial_data)
unpacker.feed(more_data)
read
Read one complete object.
obj = unpacker.read
# Returns nil if more data needed
Read map header and return size.
size = unpacker.read_map_header
Read array header and return size.
size = unpacker.read_array_header
skip
Skip one complete object.
feed_each {|obj| …}
Iterate over objects in the buffer.
unpacker.feed_each(data) do |obj|
process(obj)
end
full_unpack
Read one object and reset.
obj = unpacker.full_unpack(data)
Class: Messagepack::BinaryBuffer
new(io = nil)
buffer = Messagepack::BinaryBuffer.new
buffer = Messagepack::BinaryBuffer.new(io)
read(n)
Read n bytes from buffer.
Exceptions
Messagepack::UnpackError
Base class for unpacking errors.
Raised when data is not valid MessagePack format.
begin
Messagepack.unpack("invalid")
rescue Messagepack::MalformedFormatError => e
puts e.message
end
Messagepack::StackError
Raised when data is too deeply nested.
Messagepack::TypeError
Raised when a type cannot be serialized.