Skip to content

Commit e17f556

Browse files
committed
Add optional serde support
1 parent 7c3d75c commit e17f556

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

Cargo.toml

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@ categories = ["embedded", "no-std", "data-structures"]
1515

1616

1717
[dependencies]
18+
serde = { version = "1", optional = true }
1819

1920
[features]
2021
default = ["std"]
2122
std = []
2223

2324
[badges]
2425
travis-ci = {repository = "kjetilkjeka/uX", branch = "master"}
25-
maintenance = {status = "actively-developed"}
26+
maintenance = {status = "actively-developed"}

src/lib.rs

+22
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
#![cfg_attr(not(feature="std"), no_std)]
1313

14+
#[cfg(feature = "serde")]
15+
extern crate serde;
1416

1517
mod lib {
1618
pub mod core {
@@ -184,6 +186,26 @@ macro_rules! implement_common {
184186

185187
}
186188

189+
#[cfg(feature = "serde")]
190+
impl $crate::serde::Serialize for $name {
191+
fn serialize<S: $crate::serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
192+
self.0.serialize(serializer)
193+
}
194+
}
195+
196+
#[cfg(feature = "serde")]
197+
impl<'de> $crate::serde::Deserialize<'de> for $name {
198+
fn deserialize<D: $crate::serde::Deserializer<'de>>(deserializer: D) -> Result<$name, D::Error> {
199+
let value = <$type as $crate::serde::Deserialize<'de>>::deserialize(deserializer)?;
200+
201+
if value <= $name::MAX.0 && value >= $name::MIN.0 {
202+
Ok($name(value))
203+
}
204+
else {
205+
Err($crate::serde::de::Error::custom("out of bounds"))
206+
}
207+
}
208+
}
187209

188210
impl PartialEq for $name {
189211
fn eq(&self, other: &Self) -> bool {

0 commit comments

Comments
 (0)