Crates.io | montycat_serialization_derive |
lib.rs | montycat_serialization_derive |
version | 0.1.3 |
source | src |
created_at | 2024-10-16 02:33:47.050761 |
updated_at | 2024-11-16 17:54:09.844647 |
description | A derive trait for custom compact serialization/deserialization. |
homepage | |
repository | |
max_upload_size | |
id | 1411080 |
size | 7,583 |
montycat_serialization_derive
is a procedural macro library designed to make binary serialization and deserialization in Rust seamless and efficient. Built on top of the serde
and rmp-serde
ecosystems, it provides the tools needed to serialize and deserialize structs into compact MessagePack (binary) formats.
serde
framework for flexible data representation.rmp-serde
).This crate relies on the following dependencies:
serde
(with derive
feature enabled)rmp-serde
for MessagePack serialization/deserializationMake sure to include these dependencies in your Cargo.toml
.
Add the crate to your project's dependencies in Cargo.toml
:
[dependencies]
montycat_serialization_derive = "0.1.1"
serde = { version = "1.0", features = ["derive"] }
rmp-serde = "1.3.0"
Import and setup your struct
use serde::{Serialize, Deserialize};
use montycat_serialization_derive::BinaryConvert;
#[derive(Serialize, Deserialize, BinaryConvert, Default)]
struct MyStruct {
id: u32,
name: String,
}
Use methods from the crate
fn main() {
// Create an instance of the struct
let original = MyStruct {
id: 42,
name: "Monty".to_string(),
};
// Serialize the struct to binary
let bytes = original.convert_to_bytes();
println!("Serialized bytes: {:?}", bytes);
// Deserialize the binary back into the struct
let deserialized = MyStruct::convert_from_bytes(&bytes);
println!("Deserialized struct: id = {}, name = {}", deserialized.id, deserialized.name);
// Verify correctness
assert_eq!(original.id, deserialized.id);
assert_eq!(original.name, deserialized.name);
}
Serialization (convert_to_bytes): If serialization fails, an empty Vec
The library uses the MessagePack format, making it compact and efficient for binary data storage or transmission. For additional control over serialization, you can use serde attributes (e.g., #[serde(rename = "...")], #[serde(skip)]).