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
14 changes: 14 additions & 0 deletions source/postcard-schema/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,13 @@ package = "serde-big-array"
version = "0.5.1"
optional = true

[dependencies.uom_v0_37]
package = "uom"
version = "0.37.0"
optional = true
default-features = false
features = ["si", "serde"]

[dev-dependencies.postcard]
path = "../postcard"
version = "1.0"
Expand All @@ -89,6 +96,12 @@ version = "0.33.0"
default-features = false
features = ["serde-serialize-no-std"]

[dev-dependencies.uom_v0_37]
package = "uom"
version = "0.37.0"
default-features = false
features = ["si", "serde", "f32", "f64", "u8"]

[features]
default = []
use-std = ["serde/std"]
Expand All @@ -106,3 +119,4 @@ heapless-v0_8 = ["heapless_v0_8"]
nalgebra-v0_33 = ["nalgebra_v0_33"]
serde-big-array-v0_5 = ["serde-big-array_v0_5"]
uuid-v1_0 = ["uuid_v1_0"]
uom-v0_37 = ["uom_v0_37"]
4 changes: 4 additions & 0 deletions source/postcard-schema/src/impls/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,10 @@ pub mod serde_big_array_v0_5;
#[cfg_attr(docsrs, doc(cfg(feature = "uuid-v1_0")))]
pub mod uuid_v1_0;

#[cfg(feature = "uom-v0_37")]
#[cfg_attr(docsrs, doc(cfg(feature = "uom-v0_37")))]
pub mod uom_v0_37;

impl Schema for NamedType {
const SCHEMA: &'static NamedType = &NamedType {
name: "NamedType",
Expand Down
39 changes: 39 additions & 0 deletions source/postcard-schema/src/impls/uom_v0_37.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
//! Implementations of the [`Schema`] trait for the `uom` crate v0.37

use crate::Schema;

impl<D, U, V> Schema for uom_v0_37::si::Quantity<D, U, V>
where
D: uom_v0_37::si::Dimension + ?Sized,
U: uom_v0_37::si::Units<V> + ?Sized,
V: uom_v0_37::num::Num + uom_v0_37::Conversion<V> + Schema,
{
const SCHEMA: &'static crate::schema::NamedType = V::SCHEMA;
}

#[test]
fn f32_schema_check() {
type T = uom_v0_37::si::f32::Acceleration;
assert_eq!(T::SCHEMA.ty, f32::SCHEMA.ty);
}

#[test]
fn f64_schema_check() {
type T = uom_v0_37::si::f64::ThermodynamicTemperature;
assert_eq!(T::SCHEMA.ty, f64::SCHEMA.ty);
}

#[test]
fn u8_schema_check() {
type T = uom_v0_37::si::u8::AngularVelocity;
assert_eq!(T::SCHEMA.ty, u8::SCHEMA.ty);
}

#[test]
fn u8_conversion() {
let x = uom_v0_37::si::u8::Acceleration::new::<
uom_v0_37::si::acceleration::meter_per_second_squared,
>(4);
let y = postcard::to_stdvec(&x).unwrap();
assert_eq!(Some(&4), y.first());
}
Loading