5 releases
new 0.1.10 | Jan 29, 2025 |
---|---|
0.1.9 | Jan 28, 2025 |
0.1.8 | Jan 28, 2025 |
0.1.7 | Jan 21, 2025 |
0.1.6 | Jan 21, 2025 |
#373 in Encoding
871 downloads per month
Used in 12 crates
(via maili-genesis)
13KB
76 lines
maili-serde
Serde related helpers for Maili.
Graceful Serialization
This crate extends the serialization and deserialization
functionality provided by alloy-serde
to
deserialize raw number quantity values.
This issue arose in u128
toml deserialization where
deserialization of a raw number fails.
This rust playground demonstrates how toml fails to
deserialize a native u128
internal value.
With maili-serde
, tagging the inner u128
field with #[serde(with = "maili_serde::quantity")]
,
allows the u128
or any other type within the following constraints to be deserialized by toml properly.
These are the supported native types:
bool
u8
u16
u32
u64
u128
Below demonstrates the use of the #[serde(with = "maili_serde::quantity")]
attribute.
use serde::{Serialize, Deserialize};
/// My wrapper type.
#[derive(Debug, Serialize, Deserialize)]
pub struct MyStruct {
/// The inner `u128` value.
#[serde(with = "maili_serde::quantity")]
pub inner: u128,
}
// Correctly deserializes a raw value.
let raw_toml = r#"inner = 120"#;
let b: MyStruct = toml::from_str(raw_toml).expect("failed to deserialize toml");
println!("{}", b.inner);
// Notice that a string value is also deserialized correctly.
let raw_toml = r#"inner = "120""#;
let b: MyStruct = toml::from_str(raw_toml).expect("failed to deserialize toml");
println!("{}", b.inner);
Provenance
This code is heavily based on the alloy-serde
crate.
Dependencies
~5.5–8.5MB
~164K SLoC