From f07922cdb4c91f6b58537207668275f81e4f2ca2 Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Sun, 29 Oct 2023 09:43:15 +0100 Subject: [PATCH] feat: default postcard 1.0 --- libraries/native_model/Cargo.toml | 3 ++- libraries/native_model/src/codec/mod.rs | 1 + .../native_model/src/codec/postcard_1_0.rs | 18 ++++++++++++++++++ libraries/native_model/tests_crate/Cargo.toml | 4 ++-- .../example/default_codec/bincode_2_rc.rs | 2 +- .../tests/example/default_codec/mod.rs | 3 ++- .../example/default_codec/postcard_1_0.rs | 18 ++++++++++++++++++ 7 files changed, 44 insertions(+), 5 deletions(-) create mode 100644 libraries/native_model/src/codec/postcard_1_0.rs create mode 100644 libraries/native_model/tests_crate/tests/example/default_codec/postcard_1_0.rs diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 632312c7..6987ecb4 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -23,6 +23,7 @@ native_model_macro = { version = "0.3.30", path = "native_model_macro" } serde = { version = "1.0", features = ["derive"], optional = true } bincode_1_3 = { package = "bincode", version = "1.3", optional = true } bincode_2_rc = { package = "bincode", version = "2.0.0-rc.3", features = ["serde"], optional = true } +postcard_1_0 = { package = "postcard", version = "1.0", features = ["alloc"], optional = true } [dev-dependencies] serde_json = "1.0" @@ -30,7 +31,7 @@ criterion = { version = "0.5.1" } skeptic = "0.13" [features] -default = ["serde", "bincode_1_3", "bincode_2_rc"] +default = ["serde", "bincode_1_3", "bincode_2_rc", "postcard_1_0"] [[bench]] name = "overhead" diff --git a/libraries/native_model/src/codec/mod.rs b/libraries/native_model/src/codec/mod.rs index 83691899..e58dccc1 100644 --- a/libraries/native_model/src/codec/mod.rs +++ b/libraries/native_model/src/codec/mod.rs @@ -1,5 +1,6 @@ pub mod bincode_1_3; pub mod bincode_2_rc; +pub mod postcard_1_0; /// Encode trait for your own encoding method. /// diff --git a/libraries/native_model/src/codec/postcard_1_0.rs b/libraries/native_model/src/codec/postcard_1_0.rs new file mode 100644 index 00000000..ddea1584 --- /dev/null +++ b/libraries/native_model/src/codec/postcard_1_0.rs @@ -0,0 +1,18 @@ +use postcard_1_0::{from_bytes, to_allocvec, Error}; +use serde::{Deserialize, Serialize}; + +pub struct PostCard; + +impl super::Encode for PostCard { + type Error = Error; + fn encode(obj: &T) -> Result, Error> { + Ok(to_allocvec(obj)?) + } +} + +impl Deserialize<'a>> super::Decode for PostCard { + type Error = Error; + fn decode(data: Vec) -> Result { + Ok(from_bytes(&data)?) + } +} diff --git a/libraries/native_model/tests_crate/Cargo.toml b/libraries/native_model/tests_crate/Cargo.toml index ac4fb18b..70237955 100644 --- a/libraries/native_model/tests_crate/Cargo.toml +++ b/libraries/native_model/tests_crate/Cargo.toml @@ -3,11 +3,11 @@ name = "tests_crate" version = "0.1.0" edition = "2021" - [workspace] [dev-dependencies] native_model = { path = "../" } serde = { version = "1.0", features = ["derive"] } bincode = { version = "2.0.0-rc.3", features = ["serde"] } -anyhow = "1.0.44" \ No newline at end of file +anyhow = "1.0" +postcard = { version = "1.0", features = ["alloc"] } \ No newline at end of file diff --git a/libraries/native_model/tests_crate/tests/example/default_codec/bincode_2_rc.rs b/libraries/native_model/tests_crate/tests/example/default_codec/bincode_2_rc.rs index 3ee86804..90580a53 100644 --- a/libraries/native_model/tests_crate/tests/example/default_codec/bincode_2_rc.rs +++ b/libraries/native_model/tests_crate/tests/example/default_codec/bincode_2_rc.rs @@ -1,4 +1,4 @@ -use native_model::{native_model, bincode_2_rc}; +use native_model::{native_model}; use serde::Deserialize; use serde::Serialize; diff --git a/libraries/native_model/tests_crate/tests/example/default_codec/mod.rs b/libraries/native_model/tests_crate/tests/example/default_codec/mod.rs index b146d1f8..eb9f386f 100644 --- a/libraries/native_model/tests_crate/tests/example/default_codec/mod.rs +++ b/libraries/native_model/tests_crate/tests/example/default_codec/mod.rs @@ -1,2 +1,3 @@ mod bincode_1_3; -mod bincode_2_rc; \ No newline at end of file +mod bincode_2_rc; +mod postcard_1_0; \ No newline at end of file diff --git a/libraries/native_model/tests_crate/tests/example/default_codec/postcard_1_0.rs b/libraries/native_model/tests_crate/tests/example/default_codec/postcard_1_0.rs new file mode 100644 index 00000000..a65867b6 --- /dev/null +++ b/libraries/native_model/tests_crate/tests/example/default_codec/postcard_1_0.rs @@ -0,0 +1,18 @@ +use native_model::{native_model}; +use serde::Deserialize; +use serde::Serialize; + +#[derive(Serialize, Deserialize, PartialEq, Debug)] +#[native_model(id = 1, version = 1, with = native_model::postcard_1_0::PostCard)] +struct Example { + a: u32, + b: u32, +} + +#[test] +fn encode_decode() { + let example = Example { a: 1, b: 2 }; + let bytes = native_model::encode(&example).unwrap(); + let (example, _) = native_model::decode::(bytes).unwrap(); + assert_eq!(example, Example { a: 1, b: 2 }); +}