Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ci.sh
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ cargo_test() {
cargo test --all "$@"
}

cargo_test --features=alloc,experimental-derive,use-std,use-crc,derive,nalgebra-v0_33,heapless-v0_8,heapless-v0_9,embedded-io-v0_7
cargo_test --features=alloc,experimental-derive,use-std,use-crc,derive,nalgebra-v0_33,heapless-v0_8,heapless-v0_9,embedded-io-v0_7,bytes-v1_0,indexmap-v2_0,log-v0_4

# NOTE: we exclude postcard-dyn for these checks because it is std-only

Expand Down
43 changes: 43 additions & 0 deletions source/postcard-schema-ng/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -85,17 +85,57 @@ package = "serde-big-array"
version = "0.5.1"
optional = true

[dependencies.bytes_v1_0]
package = "bytes"
version = "1.0"
optional = true
default-features = false

[dependencies.indexmap_v2_0]
package = "indexmap"
version = "2.0"
optional = true
default-features = false

[dependencies.log_v0_4]
package = "log"
version = "0.4"
optional = true
default-features = false

[dev-dependencies.postcard]
path = "../postcard"
version = "1.0"
features = ["use-std"]

[dev-dependencies.postcard-dyn-ng]
path = "../postcard-dyn-ng"
version = "0.3"

[dev-dependencies.serde_json]
version = "1.0"

[dev-dependencies.nalgebra_v0_33]
package = "nalgebra"
version = "0.33.0"
default-features = false
features = ["serde-serialize-no-std"]

[dev-dependencies.bytes_v1_0]
package = "bytes"
version = "1.0"
features = ["std", "serde"]

[dev-dependencies.indexmap_v2_0]
package = "indexmap"
version = "2.0"
features = ["std", "serde"]

[dev-dependencies.log_v0_4]
package = "log"
version = "0.4"
features = ["serde"]

[features]
default = []
use-std = ["serde/std"]
Expand All @@ -114,3 +154,6 @@ heapless-v0_9 = ["heapless_v0_9"]
nalgebra-v0_33 = ["nalgebra_v0_33"]
serde-big-array-v0_5 = ["serde-big-array_v0_5"]
uuid-v1_0 = ["uuid_v1_0"]
bytes-v1_0 = ["bytes_v1_0"]
indexmap-v2_0 = ["indexmap_v2_0"]
log-v0_4 = ["log_v0_4"]
8 changes: 8 additions & 0 deletions source/postcard-schema-ng/src/impls/bytes_v1_0.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
//! Implementations of the [`Schema`] trait for the `bytes` crate v1.0

use crate::{schema::DataModelType, Schema};

#[cfg_attr(docsrs, doc(cfg(feature = "bytes-v1_0")))]
impl Schema for bytes_v1_0::Bytes {
const SCHEMA: &'static DataModelType = &DataModelType::ByteArray;
}
15 changes: 15 additions & 0 deletions source/postcard-schema-ng/src/impls/indexmap_v2_0.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
//! Implementations of the [`Schema`] trait for the `indexmap` crate v2.0
use crate::{schema::DataModelType, Schema};

#[cfg_attr(docsrs, doc(cfg(feature = "indexmap-v2_0")))]
impl<K: Schema, V: Schema, S> Schema for indexmap_v2_0::IndexMap<K, V, S> {
const SCHEMA: &'static DataModelType = &DataModelType::Map {
key: K::SCHEMA,
val: V::SCHEMA,
};
}

#[cfg_attr(docsrs, doc(cfg(feature = "indexmap-v2_0")))]
impl<T: Schema, S> Schema for indexmap_v2_0::IndexSet<T, S> {
const SCHEMA: &'static DataModelType = &DataModelType::Seq(T::SCHEMA);
}
66 changes: 66 additions & 0 deletions source/postcard-schema-ng/src/impls/log_v0_4.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
//! Implementations of the [`Schema`] trait for the `log` crate v0.4

use crate::{
schema::{Data, DataModelType, Variant},
Schema,
};

impl Schema for log_v0_4::Level {
const SCHEMA: &'static DataModelType = &DataModelType::Enum {
name: "Level",
variants: &[
&Variant {
name: "ERROR",
data: Data::Unit,
},
&Variant {
name: "WARN",
data: Data::Unit,
},
&Variant {
name: "INFO",
data: Data::Unit,
},
&Variant {
name: "DEBUG",
data: Data::Unit,
},
&Variant {
name: "TRACE",
data: Data::Unit,
},
],
};
}

impl Schema for log_v0_4::LevelFilter {
const SCHEMA: &'static DataModelType = &DataModelType::Enum {
name: "Level",
variants: &[
&Variant {
name: "OFF",
data: Data::Unit,
},
&Variant {
name: "ERROR",
data: Data::Unit,
},
&Variant {
name: "WARN",
data: Data::Unit,
},
&Variant {
name: "INFO",
data: Data::Unit,
},
&Variant {
name: "DEBUG",
data: Data::Unit,
},
&Variant {
name: "TRACE",
data: Data::Unit,
},
],
};
}
12 changes: 12 additions & 0 deletions source/postcard-schema-ng/src/impls/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,18 @@ pub mod serde_big_array_v0_5;
#[cfg_attr(docsrs, doc(cfg(feature = "uuid-v1_0")))]
pub mod uuid_v1_0;

#[cfg(feature = "bytes-v1_0")]
#[cfg_attr(docsrs, doc(cfg(feature = "bytes-v1_0")))]
pub mod bytes_v1_0;

#[cfg(feature = "indexmap-v2_0")]
#[cfg_attr(docsrs, doc(cfg(feature = "indexmap-v2_0")))]
pub mod indexmap_v2_0;

#[cfg(feature = "log-v0_4")]
#[cfg_attr(docsrs, doc(cfg(feature = "log-v0_4")))]
pub mod log_v0_4;

impl Schema for DataModelType {
const SCHEMA: &'static DataModelType = &DataModelType::Schema;
}
6 changes: 6 additions & 0 deletions source/postcard-schema-ng/tests/impls/bytes_v1_0.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#![cfg(feature = "bytes-v1_0")]

#[test]
fn bytes_round_trip() {
super::round_trip_test(bytes_v1_0::Bytes::from(vec![1, 2, 3, 4]));
}
14 changes: 14 additions & 0 deletions source/postcard-schema-ng/tests/impls/indexmap_v2_0.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#![cfg(feature = "indexmap-v2_0")]

#[test]
fn indexmap_round_trip() {
super::round_trip_test(indexmap_v2_0::IndexMap::<String, u32>::from([
("a".to_string(), 2),
("b".to_string(), 3),
]));
}

#[test]
fn indexset_round_trip() {
super::round_trip_test(indexmap_v2_0::IndexSet::<u32>::from([1, 2, 3, 4]));
}
28 changes: 28 additions & 0 deletions source/postcard-schema-ng/tests/impls/log_v0_4.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#![cfg(feature = "log-v0_4")]

#[test]
fn log_level_smoke() {
for level in [
log_v0_4::Level::Error,
log_v0_4::Level::Warn,
log_v0_4::Level::Info,
log_v0_4::Level::Debug,
log_v0_4::Level::Trace,
] {
super::round_trip_test(level);
}
}

#[test]
fn log_level_filter_smoke() {
for level_filter in [
log_v0_4::LevelFilter::Off,
log_v0_4::LevelFilter::Error,
log_v0_4::LevelFilter::Warn,
log_v0_4::LevelFilter::Info,
log_v0_4::LevelFilter::Debug,
log_v0_4::LevelFilter::Trace,
] {
super::round_trip_test(level_filter);
}
}
20 changes: 20 additions & 0 deletions source/postcard-schema-ng/tests/impls/main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
mod bytes_v1_0;
mod indexmap_v2_0;
mod log_v0_4;

use std::cmp::PartialEq;
use std::fmt::Debug;

use postcard_schema_ng::{schema::owned::OwnedDataModelType, Schema};
use serde::{de::DeserializeOwned, Serialize};

fn round_trip_test<T>(val: T)
where
T: Serialize + DeserializeOwned + Schema + PartialEq + Debug,
{
let schema = OwnedDataModelType::from(T::SCHEMA);
let encoded = postcard::to_allocvec(&val).unwrap();
let value = postcard_dyn_ng::from_slice_dyn(&schema, &encoded).unwrap();
let decoded: T = serde_json::from_value(value).unwrap();
assert_eq!(val, decoded);
}
42 changes: 42 additions & 0 deletions source/postcard-schema/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -90,11 +90,35 @@ package = "serde-big-array"
version = "0.5.1"
optional = true

[dependencies.bytes_v1_0]
package = "bytes"
version = "1.0"
optional = true
default-features = false

[dependencies.indexmap_v2_0]
package = "indexmap"
version = "2.0"
optional = true
default-features = false

[dependencies.log_v0_4]
package = "log"
version = "0.4"
optional = true
default-features = false

[dev-dependencies.postcard]
path = "../postcard"
version = "1.0"
features = ["use-std"]

[dev-dependencies.postcard-dyn]
path = "../postcard-dyn"

[dev-dependencies.serde_json]
version = "1.0"

[dev-dependencies.nalgebra_v0_33]
package = "nalgebra"
version = "0.33.0"
Expand All @@ -107,6 +131,21 @@ version = "0.34.1"
default-features = false
features = ["serde-serialize-no-std"]

[dev-dependencies.bytes_v1_0]
package = "bytes"
version = "1.0"
features = ["std", "serde"]

[dev-dependencies.indexmap_v2_0]
package = "indexmap"
version = "2.0"
features = ["std", "serde"]

[dev-dependencies.log_v0_4]
package = "log"
version = "0.4"
features = ["serde"]

[features]
default = []
use-std = ["serde/std"]
Expand All @@ -126,3 +165,6 @@ nalgebra-v0_33 = ["nalgebra_v0_33"]
nalgebra-v0_34 = ["nalgebra_v0_34"]
serde-big-array-v0_5 = ["serde-big-array_v0_5"]
uuid-v1_0 = ["uuid_v1_0"]
bytes-v1_0 = ["bytes_v1_0"]
indexmap-v2_0 = ["indexmap_v2_0"]
log-v0_4 = ["log_v0_4"]
14 changes: 14 additions & 0 deletions source/postcard-schema/src/impls/bytes_v1_0.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
//! Implementations of the [`Schema`] trait for the `bytes` crate v1.0

use crate::{
schema::{DataModelType, NamedType},
Schema,
};

#[cfg_attr(docsrs, doc(cfg(feature = "bytes-v1_0")))]
impl Schema for bytes_v1_0::Bytes {
const SCHEMA: &'static NamedType = &NamedType {
name: "Bytes",
ty: &DataModelType::ByteArray,
};
}
24 changes: 24 additions & 0 deletions source/postcard-schema/src/impls/indexmap_v2_0.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
//! Implementations of the [`Schema`] trait for the `indexmap` crate v2.0
use crate::{
schema::{DataModelType, NamedType},
Schema,
};

#[cfg_attr(docsrs, doc(cfg(feature = "indexmap-v2_0")))]
impl<K: Schema, V: Schema, S> Schema for indexmap_v2_0::IndexMap<K, V, S> {
const SCHEMA: &'static NamedType = &NamedType {
name: "IndexMap<K, V",
ty: &DataModelType::Map {
key: K::SCHEMA,
val: V::SCHEMA,
},
};
}

#[cfg_attr(docsrs, doc(cfg(feature = "indexmap-v2_0")))]
impl<T: Schema, S> Schema for indexmap_v2_0::IndexSet<T, S> {
const SCHEMA: &'static NamedType = &NamedType {
name: "IndexSet<T>",
ty: &DataModelType::Seq(T::SCHEMA),
};
}
Loading