feat: default bincode 2.0.0-rc.*

This commit is contained in:
Vincent Herlemont
2023-10-29 09:42:30 +01:00
parent b4425b0597
commit 7ff3b31c9b
22 changed files with 68 additions and 11 deletions

View File

@@ -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"

22
src/codec/bincode_2_rc.rs Normal file
View File

@@ -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<T: Serialize> super::Encode<T> for Bincode {
type Error = EncodeError;
fn encode(obj: &T) -> Result<Vec<u8>, EncodeError> {
encode_to_vec(obj, config::standard())
}
}
impl<T: for<'a> Deserialize<'a>> super::Decode<T> for Bincode {
type Error = DecodeError;
fn decode(data: Vec<u8>) -> Result<T, DecodeError> {
Ok(decode_from_slice(&data, config::standard())?.0)
}
}

View File

@@ -1,4 +1,5 @@
pub mod bincode_1_3;
pub mod bincode_2_rc;
/// Encode trait for your own encoding method.
///

2
tests_crate/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
/target
/Cargo.lock

13
tests_crate/Cargo.toml Normal file
View File

@@ -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"

View File

@@ -17,7 +17,7 @@ impl<T: bincode::Decode> native_model::Decode<T> 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)]

View File

@@ -33,7 +33,7 @@ impl<T: for<'a> Deserialize<'a>> native_model::Decode<T> 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)]

View File

@@ -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::<Example>(bytes).unwrap();
assert_eq!(example, Example { a: 1, b: 2 });
}

View File

@@ -1 +1,2 @@
mod bincode_1_3;
mod bincode_2_rc;

View File

@@ -1,5 +1,5 @@
use bincode::{config, Decode, Encode};
use native_model_macro::native_model;
use native_model::native_model;
pub struct Bincode;

View File

@@ -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<T: bincode::Encode> native_model::Encode<T> for Bincode {

View File

@@ -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;

View File

@@ -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;

1
tests_crate/tests/mod.rs Normal file
View File

@@ -0,0 +1 @@
mod example;

View File

@@ -1,5 +1,5 @@
use bincode::{config, Decode, Encode};
use native_model_macro::native_model;
use native_model::native_model;
pub struct Bincode;
impl<T: bincode::Encode> native_model::Encode<T> for Bincode {
type Error = bincode::error::EncodeError;

View File

@@ -1,5 +1,5 @@
use bincode::{config, Decode, Encode};
use native_model_macro::native_model;
use native_model::native_model;
pub struct Bincode;