diff --git a/libraries/native_model/Cargo.toml b/libraries/native_model/Cargo.toml index 7f0fdf6b..632312c7 100644 --- a/libraries/native_model/Cargo.toml +++ b/libraries/native_model/Cargo.toml @@ -22,15 +22,15 @@ 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 } [dev-dependencies] -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"] +default = ["serde", "bincode_1_3", "bincode_2_rc"] [[bench]] name = "overhead" diff --git a/libraries/native_model/src/codec/bincode_2_rc.rs b/libraries/native_model/src/codec/bincode_2_rc.rs new file mode 100644 index 00000000..400bf405 --- /dev/null +++ b/libraries/native_model/src/codec/bincode_2_rc.rs @@ -0,0 +1,22 @@ +use bincode_2_rc::{ + config, + error::{DecodeError, EncodeError}, + serde::{decode_from_slice, encode_to_vec}, +}; +use serde::{Deserialize, Serialize}; + +pub struct Bincode; + +impl super::Encode for Bincode { + type Error = EncodeError; + fn encode(obj: &T) -> Result, EncodeError> { + encode_to_vec(obj, config::standard()) + } +} + +impl Deserialize<'a>> super::Decode for Bincode { + type Error = DecodeError; + fn decode(data: Vec) -> Result { + Ok(decode_from_slice(&data, config::standard())?.0) + } +} diff --git a/libraries/native_model/src/codec/mod.rs b/libraries/native_model/src/codec/mod.rs index 44f71edb..83691899 100644 --- a/libraries/native_model/src/codec/mod.rs +++ b/libraries/native_model/src/codec/mod.rs @@ -1,4 +1,5 @@ pub mod bincode_1_3; +pub mod bincode_2_rc; /// Encode trait for your own encoding method. /// diff --git a/libraries/native_model/tests_crate/.gitignore b/libraries/native_model/tests_crate/.gitignore new file mode 100644 index 00000000..2ebc5ea0 --- /dev/null +++ b/libraries/native_model/tests_crate/.gitignore @@ -0,0 +1,2 @@ +/target +/Cargo.lock \ No newline at end of file diff --git a/libraries/native_model/tests_crate/Cargo.toml b/libraries/native_model/tests_crate/Cargo.toml new file mode 100644 index 00000000..ac4fb18b --- /dev/null +++ b/libraries/native_model/tests_crate/Cargo.toml @@ -0,0 +1,13 @@ +[package] +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 diff --git a/libraries/native_model/tests/_example.rs b/libraries/native_model/tests_crate/tests/_example.rs similarity index 100% rename from libraries/native_model/tests/_example.rs rename to libraries/native_model/tests_crate/tests/_example.rs diff --git a/libraries/native_model/tests/_experiment.rs b/libraries/native_model/tests_crate/tests/_experiment.rs similarity index 100% rename from libraries/native_model/tests/_experiment.rs rename to libraries/native_model/tests_crate/tests/_experiment.rs diff --git a/libraries/native_model/tests/example/custom_codec/bincode.rs b/libraries/native_model/tests_crate/tests/example/custom_codec/bincode.rs similarity index 96% rename from libraries/native_model/tests/example/custom_codec/bincode.rs rename to libraries/native_model/tests_crate/tests/example/custom_codec/bincode.rs index 71507775..9b1cadff 100644 --- a/libraries/native_model/tests/example/custom_codec/bincode.rs +++ b/libraries/native_model/tests_crate/tests/example/custom_codec/bincode.rs @@ -17,7 +17,7 @@ impl native_model::Decode for Bincode { } } -use native_model_macro::native_model; +use native_model::native_model; #[derive(Encode, Decode, PartialEq, Debug)] #[native_model(id = 1, version = 1, with = Bincode)] diff --git a/libraries/native_model/tests/example/custom_codec/bincode_serde.rs b/libraries/native_model/tests_crate/tests/example/custom_codec/bincode_serde.rs similarity index 97% rename from libraries/native_model/tests/example/custom_codec/bincode_serde.rs rename to libraries/native_model/tests_crate/tests/example/custom_codec/bincode_serde.rs index 090bebd9..8d239753 100644 --- a/libraries/native_model/tests/example/custom_codec/bincode_serde.rs +++ b/libraries/native_model/tests_crate/tests/example/custom_codec/bincode_serde.rs @@ -33,7 +33,7 @@ impl Deserialize<'a>> native_model::Decode for Bincode { } } -use native_model_macro::native_model; +use native_model::native_model; #[derive(Serialize, Deserialize, PartialEq, Debug)] #[native_model(id = 1, version = 1, with = Bincode)] diff --git a/libraries/native_model/tests/example/custom_codec/mod.rs b/libraries/native_model/tests_crate/tests/example/custom_codec/mod.rs similarity index 100% rename from libraries/native_model/tests/example/custom_codec/mod.rs rename to libraries/native_model/tests_crate/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_crate/tests/example/default_codec/bincode_1_3.rs similarity index 100% rename from libraries/native_model/tests/example/default_codec/bincode_1_3.rs rename to libraries/native_model/tests_crate/tests/example/default_codec/bincode_1_3.rs 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 new file mode 100644 index 00000000..3ee86804 --- /dev/null +++ b/libraries/native_model/tests_crate/tests/example/default_codec/bincode_2_rc.rs @@ -0,0 +1,18 @@ +use native_model::{native_model, bincode_2_rc}; +use serde::Deserialize; +use serde::Serialize; + +#[derive(Serialize, Deserialize, PartialEq, Debug)] +#[native_model(id = 1, version = 1, with = native_model::bincode_2_rc::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_crate/tests/example/default_codec/mod.rs similarity index 50% rename from libraries/native_model/tests/example/default_codec/mod.rs rename to libraries/native_model/tests_crate/tests/example/default_codec/mod.rs index 6447aa6b..b146d1f8 100644 --- a/libraries/native_model/tests/example/default_codec/mod.rs +++ b/libraries/native_model/tests_crate/tests/example/default_codec/mod.rs @@ -1 +1,2 @@ mod bincode_1_3; +mod bincode_2_rc; \ No newline at end of file diff --git a/libraries/native_model/tests/example/example_define_model.rs b/libraries/native_model/tests_crate/tests/example/example_define_model.rs similarity index 98% rename from libraries/native_model/tests/example/example_define_model.rs rename to libraries/native_model/tests_crate/tests/example/example_define_model.rs index 14b204b3..6556c8f6 100644 --- a/libraries/native_model/tests/example/example_define_model.rs +++ b/libraries/native_model/tests_crate/tests/example/example_define_model.rs @@ -1,5 +1,5 @@ use bincode::{config, Decode, Encode}; -use native_model_macro::native_model; +use native_model::native_model; pub struct Bincode; diff --git a/libraries/native_model/tests/example/example_main.rs b/libraries/native_model/tests_crate/tests/example/example_main.rs similarity index 100% rename from libraries/native_model/tests/example/example_main.rs rename to libraries/native_model/tests_crate/tests/example/example_main.rs diff --git a/libraries/native_model/tests/example/mod.rs b/libraries/native_model/tests_crate/tests/example/mod.rs similarity index 100% rename from libraries/native_model/tests/example/mod.rs rename to libraries/native_model/tests_crate/tests/example/mod.rs diff --git a/libraries/native_model/tests/macro.rs b/libraries/native_model/tests_crate/tests/macro.rs similarity index 95% rename from libraries/native_model/tests/macro.rs rename to libraries/native_model/tests_crate/tests/macro.rs index 3d6459ad..21ea3073 100644 --- a/libraries/native_model/tests/macro.rs +++ b/libraries/native_model/tests_crate/tests/macro.rs @@ -1,6 +1,5 @@ use bincode::{config, Decode, Encode}; -use native_model::Model; -use native_model_macro::native_model; +use native_model::{native_model, Model}; pub struct Bincode; impl native_model::Encode for Bincode { diff --git a/libraries/native_model/tests/macro_decode_decode_upgrade.rs b/libraries/native_model/tests_crate/tests/macro_decode_decode_upgrade.rs similarity index 99% rename from libraries/native_model/tests/macro_decode_decode_upgrade.rs rename to libraries/native_model/tests_crate/tests/macro_decode_decode_upgrade.rs index a6e6aa71..7cd81fa0 100644 --- a/libraries/native_model/tests/macro_decode_decode_upgrade.rs +++ b/libraries/native_model/tests_crate/tests/macro_decode_decode_upgrade.rs @@ -1,6 +1,6 @@ use bincode::{config, Decode, Encode}; +use native_model::native_model; use native_model::Model; -use native_model_macro::native_model; pub struct Bincode; diff --git a/libraries/native_model/tests/macro_encode_decode.rs b/libraries/native_model/tests_crate/tests/macro_encode_decode.rs similarity index 97% rename from libraries/native_model/tests/macro_encode_decode.rs rename to libraries/native_model/tests_crate/tests/macro_encode_decode.rs index a2c42bab..bd160f2b 100644 --- a/libraries/native_model/tests/macro_encode_decode.rs +++ b/libraries/native_model/tests_crate/tests/macro_encode_decode.rs @@ -1,6 +1,6 @@ use bincode::{config, Decode, Encode}; +use native_model::native_model; use native_model::Model; -use native_model_macro::native_model; pub struct Bincode; diff --git a/libraries/native_model/tests_crate/tests/mod.rs b/libraries/native_model/tests_crate/tests/mod.rs new file mode 100644 index 00000000..4fb02733 --- /dev/null +++ b/libraries/native_model/tests_crate/tests/mod.rs @@ -0,0 +1 @@ +mod example; diff --git a/libraries/native_model/tests/native_model_from.rs b/libraries/native_model/tests_crate/tests/native_model_from.rs similarity index 98% rename from libraries/native_model/tests/native_model_from.rs rename to libraries/native_model/tests_crate/tests/native_model_from.rs index 4dd66ce4..0ec5c1c4 100644 --- a/libraries/native_model/tests/native_model_from.rs +++ b/libraries/native_model/tests_crate/tests/native_model_from.rs @@ -1,5 +1,5 @@ use bincode::{config, Decode, Encode}; -use native_model_macro::native_model; +use native_model::native_model; pub struct Bincode; impl native_model::Encode for Bincode { type Error = bincode::error::EncodeError; diff --git a/libraries/native_model/tests/native_model_try_from.rs b/libraries/native_model/tests_crate/tests/native_model_try_from.rs similarity index 98% rename from libraries/native_model/tests/native_model_try_from.rs rename to libraries/native_model/tests_crate/tests/native_model_try_from.rs index c223d945..c84da6a8 100644 --- a/libraries/native_model/tests/native_model_try_from.rs +++ b/libraries/native_model/tests_crate/tests/native_model_try_from.rs @@ -1,5 +1,5 @@ use bincode::{config, Decode, Encode}; -use native_model_macro::native_model; +use native_model::native_model; pub struct Bincode;