Добрый день.
В некоторых проектах на D пользовался cerealed. Сейчас есть небольшая похожая задача. Хочу попробовать Rust. Но, сходу, похожей библиотеки не нашел. Крейтов с двоичной сериализацией хватает. Но везде сериализация это самоцель.
А в cerealed двоичная сериализация используется как способ реализовать двоичный протокол обмена.
То есть хотелось бы контроль над тем как данные будут превращаться в байтики.
Спасибо.
bincode и rmp я видел. Это не совсем то. Видимо я не совсем точно выразил чего хочу.
По сути, каждый из них реализует свой собственный “фиксированный” двоичный протокол.
А я искал возможность описать уже существующий, необходимый мне протокол (modbus или МЭК-104, как пример), в виде сериализуемых структур.
В анонсе cerealed как пример приводится формат UDP пакета. Имеют интерес первые три сообщения из анонса.
А сейчас да, я использую bitflags!, структуры с align=1 и transmute из &[u8] в свои структуры.
bitflags! это хорошо но мало. Мне ближе bit fields. А их два. Слабенький, зато для stable, bit_field. И более весёлый, но для nightly, bitfield. В сумме с nue получилось почти хорошо. Но не так удобно.
Закралось желание попробовать написать аналог cerealed на rust. Просто из любопытства. На первый взгляд задача кажется не очень сложной.
В режиме decode-only хорошо выглядит nom. Но из него не сделать encoder. Жаль.