From 383379fe1ea2739bba0d8810501fd5799822ef60 Mon Sep 17 00:00:00 2001 From: Vincent Herlemont Date: Sun, 29 Oct 2023 09:41:42 +0100 Subject: [PATCH] feat: default bincode 1.3.3 --- libraries/native_model/Cargo.toml | 7 ++++++- .../native_model/src/codec/bincode_1_3.rs | 19 +++++++++++++++++++ libraries/native_model/src/codec/mod.rs | 2 ++ libraries/native_model/src/lib.rs | 1 + .../bincode.rs | 0 .../bincode_serde.rs | 0 .../{encode_decode => custom_codec}/mod.rs | 0 .../example/default_codec/bincode_1_3.rs | 18 ++++++++++++++++++ .../tests/example/default_codec/mod.rs | 1 + libraries/native_model/tests/example/mod.rs | 2 +- libraries/native_model/tests/macro.rs | 1 - 11 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 libraries/native_model/src/codec/bincode_1_3.rs rename libraries/native_model/tests/example/{encode_decode => custom_codec}/bincode.rs (100%) rename libraries/native_model/tests/example/{encode_decode => custom_codec}/bincode_serde.rs (100%) rename libraries/native_model/tests/example/{encode_decode => custom_codec}/mod.rs (100%) create mode 100644 libraries/native_model/tests/example/default_codec/bincode_1_3.rs create mode 100644 libraries/native_model/tests/example/default_codec/mod.rs diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 6adc0f7d..7f0fdf6b 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -20,13 +20,18 @@ thiserror = "1.0" anyhow = "1.0" 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 } + [dev-dependencies] -serde = { version = "1.0", features = ["derive"] } bincode = { version = "2.0.0-rc.3", features = ["serde"] } serde_json = "1.0" criterion = { version = "0.5.1" } skeptic = "0.13" +[features] +default = ["serde", "bincode_1_3"] + [[bench]] name = "overhead" harness = false diff --git a/libraries/native_model/src/codec/bincode_1_3.rs b/libraries/native_model/src/codec/bincode_1_3.rs new file mode 100644 index 00000000..a3fe397d --- /dev/null +++ b/libraries/native_model/src/codec/bincode_1_3.rs @@ -0,0 +1,19 @@ +use bincode_1_3::{deserialize, serialize, Error}; +use serde::{Deserialize, Serialize}; + +#[derive(Default)] +pub struct Bincode; + +impl super::Encode for Bincode { + type Error = Error; + fn encode(obj: &T) -> Result, Error> { + Ok(serialize(obj)?) + } +} + +impl Deserialize<'a>> super::Decode for Bincode { + type Error = Error; + fn decode(data: Vec) -> Result { + Ok(deserialize(&data[..])?) + } +} diff --git a/libraries/native_model/src/codec/mod.rs b/libraries/native_model/src/codec/mod.rs index da436f71..44f71edb 100644 --- a/libraries/native_model/src/codec/mod.rs +++ b/libraries/native_model/src/codec/mod.rs @@ -1,3 +1,5 @@ +pub mod bincode_1_3; + /// Encode trait for your own encoding method. /// /// Example: diff --git a/libraries/native_model/src/lib.rs b/libraries/native_model/src/lib.rs index 42475a24..eb78d1fe 100644 --- a/libraries/native_model/src/lib.rs +++ b/libraries/native_model/src/lib.rs @@ -16,6 +16,7 @@ //! See examples in the [README.md](https://github.com/vincent-herlemont/native_model) file. mod codec; +pub use codec::*; mod header; mod model; pub mod wrapper; diff --git a/libraries/native_model/tests/example/encode_decode/bincode.rs b/libraries/native_model/tests/example/custom_codec/bincode.rs similarity index 100% rename from libraries/native_model/tests/example/encode_decode/bincode.rs rename to libraries/native_model/tests/example/custom_codec/bincode.rs diff --git a/libraries/native_model/tests/example/encode_decode/bincode_serde.rs b/libraries/native_model/tests/example/custom_codec/bincode_serde.rs similarity index 100% rename from libraries/native_model/tests/example/encode_decode/bincode_serde.rs rename to libraries/native_model/tests/example/custom_codec/bincode_serde.rs diff --git a/libraries/native_model/tests/example/encode_decode/mod.rs b/libraries/native_model/tests/example/custom_codec/mod.rs similarity index 100% rename from libraries/native_model/tests/example/encode_decode/mod.rs rename to libraries/native_model/tests/example/custom_codec/mod.rs diff --git a/libraries/native_model/tests/example/default_codec/bincode_1_3.rs b/libraries/native_model/tests/example/default_codec/bincode_1_3.rs new file mode 100644 index 00000000..3f9b6a16 --- /dev/null +++ b/libraries/native_model/tests/example/default_codec/bincode_1_3.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::bincode_1_3::Bincode)] +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 }); +} diff --git a/libraries/native_model/tests/example/default_codec/mod.rs b/libraries/native_model/tests/example/default_codec/mod.rs new file mode 100644 index 00000000..6447aa6b --- /dev/null +++ b/libraries/native_model/tests/example/default_codec/mod.rs @@ -0,0 +1 @@ +mod bincode_1_3; diff --git a/libraries/native_model/tests/example/mod.rs b/libraries/native_model/tests/example/mod.rs index 1c591e28..20a38eda 100644 --- a/libraries/native_model/tests/example/mod.rs +++ b/libraries/native_model/tests/example/mod.rs @@ -1,3 +1,3 @@ -mod encode_decode; +mod default_codec; mod example_define_model; mod example_main; diff --git a/libraries/native_model/tests/macro.rs b/libraries/native_model/tests/macro.rs index 4b687701..3d6459ad 100644 --- a/libraries/native_model/tests/macro.rs +++ b/libraries/native_model/tests/macro.rs @@ -1,7 +1,6 @@ use bincode::{config, Decode, Encode}; use native_model::Model; use native_model_macro::native_model; - pub struct Bincode; impl native_model::Encode for Bincode {