Crate rmp [] [src]

The Rust MessagePack Library

RMP is a pure Rust MessagePack implementation.

MessagePack is an efficient binary serialization format.

Warning this library is still in rapid development and everything may change until 1.0 comes.

Usage

To use rmp, first add this to your Cargo.toml:

[dependencies.rmp]
rmp = "^0.7"

Then, add this to your crate root:

extern crate rmp as msgpack; // Or just `rmp`.

Features

Detailed

Данный крейт предоставляет самую базовую функциональность, необходимую для работы с MessagePack. Он идеологически задуман как фундамент для построение более высокоуровненных абстракций, облегчающих рутинную работу (например, см. rmp-serde crate).

Он состоит из трех больших модулей: encode, decode и value. Более детально о каждом из них написано в соответствующем разделе.

В двух словах MessagePack формат состоит из некого маркера, которая инкапсулирует тип данных и, собственно, значения. Иногда отдельного значения может не быть, в этом случае оно явно или неявно закодировано в самом маркере.

Также одно и то же значение может быть представлено в различном виде. Например, значение true декодируется как 0xc3, а вот значение 42 может быть представлено по-разному: [0x2a], [0xcc, 0x2a], [0xcd, 0x00, 0x2a] и тд.

RMP гарантирует, что в случае сериализации будет выбран наиболее экономное представление. В то же время гарантируется, что в случае десериализации будет возможно получить исходное значение независимо от того, какую запись выбрал источник.

API

Практически все API представляют собой чистые функции. В качестве альтернативы можно было бы расширить трейты Write и Read, но это не было сделано специально, чтобы не захламлять пространство методов. Например, в одном и том же модуле могут использоваться энкодеры в json и msgpack, в таком случае наличие метода write_u8 выглядело бы странным, а наличие write_msgpack_u8 - уродливым.

Performance

Этот крейт предоставляет настолько низкий уровено абстракции, насколько это возможно, поэтому производительность является основной целью. Любое улучшение производительности тщательно анализируется при помощи бенчмарков, благо Rust предоставляет достаточно удобные инструменты для этого.

Однако на текущий момент специально не было проведено никаких оптимизаций, так что этот код может (и будет) работать быстрее. Не стесняйтесь - тестируйте и присылайте ваши оптимизации.

Error handling

Меня всегда расстраивал код, в котором приходится делать unreachable!() в случае обработок ошибок, поэтому RMP гарантирует, что будет возвращен только тот вариант, в котором все ошибки могут произойти.

Reexports

pub use value::{Value, ValueRef};

Modules

decode

Provides various functions and structs for MessagePack decoding.

encode

Provides various functions and structs for MessagePack encoding.

value

Contains Value and ValueRef structs and its conversion traits.

Enums

Marker

Constants

MSGPACK_VERSION