zero-alloc zero-copy identifier deserialization and validation
Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
parent
9508f16eb4
commit
de41ebd92f
@ -559,6 +559,23 @@ fn expand_checked_impls(input: &ItemStruct, validate: Path) -> TokenStream {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[automatically_derived]
|
||||||
|
impl<'de, #generic_params> serde::Deserialize<'de> for &'de #id_ty {
|
||||||
|
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
||||||
|
where
|
||||||
|
D: serde::Deserializer<'de>,
|
||||||
|
{
|
||||||
|
use serde::de::Error;
|
||||||
|
|
||||||
|
let s = <&'de str>::deserialize(deserializer)?;
|
||||||
|
|
||||||
|
match #validate(s) {
|
||||||
|
Ok(_) => Ok(<#id_ty>::from_borrowed(s)),
|
||||||
|
Err(e) => Err(D::Error::custom(e)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[automatically_derived]
|
#[automatically_derived]
|
||||||
impl<'a, #generic_params> std::convert::TryFrom<&'a str> for &'a #id_ty {
|
impl<'a, #generic_params> std::convert::TryFrom<&'a str> for &'a #id_ty {
|
||||||
type Error = crate::IdParseError;
|
type Error = crate::IdParseError;
|
||||||
@ -706,6 +723,17 @@ fn expand_unchecked_impls(input: &ItemStruct) -> TokenStream {
|
|||||||
Box::<str>::deserialize(deserializer).map(#id::from_box).map(Into::into)
|
Box::<str>::deserialize(deserializer).map(#id::from_box).map(Into::into)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[automatically_derived]
|
||||||
|
impl<'de> serde::Deserialize<'de> for &'de #id {
|
||||||
|
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
||||||
|
where
|
||||||
|
D: serde::Deserializer<'de>,
|
||||||
|
{
|
||||||
|
<&'de str>::deserialize(deserializer).map(<#id>::from_borrowed).map(Into::into)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user