jid: Allow for deserializers which cannot provide borrowed strings
skip-changelog: already in there. Signed-off-by: pep <pep@bouah.net>
This commit is contained in:
parent
89feaa0391
commit
6624dffe25
1 changed files with 42 additions and 6 deletions
|
|
@ -46,40 +46,40 @@ macro_rules! def_part_into_inner_doc {
|
||||||
|
|
||||||
#[cfg(feature = "serde")]
|
#[cfg(feature = "serde")]
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
struct NodeDeserializer<'a>(&'a str);
|
struct NodeDeserializer<'a>(Cow<'a, str>);
|
||||||
|
|
||||||
#[cfg(feature = "serde")]
|
#[cfg(feature = "serde")]
|
||||||
impl TryFrom<NodeDeserializer<'_>> for NodePart {
|
impl TryFrom<NodeDeserializer<'_>> for NodePart {
|
||||||
type Error = Error;
|
type Error = Error;
|
||||||
|
|
||||||
fn try_from(deserializer: NodeDeserializer) -> Result<NodePart, Self::Error> {
|
fn try_from(deserializer: NodeDeserializer) -> Result<NodePart, Self::Error> {
|
||||||
Ok(NodePart::new(deserializer.0)?.into_owned())
|
Ok(NodePart::new(&deserializer.0)?.into_owned())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "serde")]
|
#[cfg(feature = "serde")]
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
struct DomainDeserializer<'a>(&'a str);
|
struct DomainDeserializer<'a>(Cow<'a, str>);
|
||||||
|
|
||||||
#[cfg(feature = "serde")]
|
#[cfg(feature = "serde")]
|
||||||
impl TryFrom<DomainDeserializer<'_>> for DomainPart {
|
impl TryFrom<DomainDeserializer<'_>> for DomainPart {
|
||||||
type Error = Error;
|
type Error = Error;
|
||||||
|
|
||||||
fn try_from(deserializer: DomainDeserializer) -> Result<DomainPart, Self::Error> {
|
fn try_from(deserializer: DomainDeserializer) -> Result<DomainPart, Self::Error> {
|
||||||
Ok(DomainPart::new(deserializer.0)?.into_owned())
|
Ok(DomainPart::new(&deserializer.0)?.into_owned())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "serde")]
|
#[cfg(feature = "serde")]
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
struct ResourceDeserializer<'a>(&'a str);
|
struct ResourceDeserializer<'a>(Cow<'a, str>);
|
||||||
|
|
||||||
#[cfg(feature = "serde")]
|
#[cfg(feature = "serde")]
|
||||||
impl TryFrom<ResourceDeserializer<'_>> for ResourcePart {
|
impl TryFrom<ResourceDeserializer<'_>> for ResourcePart {
|
||||||
type Error = Error;
|
type Error = Error;
|
||||||
|
|
||||||
fn try_from(deserializer: ResourceDeserializer) -> Result<ResourcePart, Self::Error> {
|
fn try_from(deserializer: ResourceDeserializer) -> Result<ResourcePart, Self::Error> {
|
||||||
Ok(ResourcePart::new(deserializer.0)?.into_owned())
|
Ok(ResourcePart::new(&deserializer.0)?.into_owned())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -350,6 +350,18 @@ mod tests {
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
serde_test::assert_de_tokens(
|
||||||
|
&NodePart(String::from("test")),
|
||||||
|
&[
|
||||||
|
serde_test::Token::TupleStruct {
|
||||||
|
name: "NodePart",
|
||||||
|
len: 1,
|
||||||
|
},
|
||||||
|
serde_test::Token::String("test"),
|
||||||
|
serde_test::Token::TupleStructEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
serde_test::assert_de_tokens_error::<NodePart>(
|
serde_test::assert_de_tokens_error::<NodePart>(
|
||||||
&[
|
&[
|
||||||
serde_test::Token::TupleStruct {
|
serde_test::Token::TupleStruct {
|
||||||
|
|
@ -378,6 +390,18 @@ mod tests {
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
serde_test::assert_de_tokens(
|
||||||
|
&DomainPart(String::from("[::1]")),
|
||||||
|
&[
|
||||||
|
serde_test::Token::TupleStruct {
|
||||||
|
name: "DomainPart",
|
||||||
|
len: 1,
|
||||||
|
},
|
||||||
|
serde_test::Token::String("[::1]"),
|
||||||
|
serde_test::Token::TupleStructEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
serde_test::assert_de_tokens(
|
serde_test::assert_de_tokens(
|
||||||
&DomainPart(String::from("domain.example")),
|
&DomainPart(String::from("domain.example")),
|
||||||
&[
|
&[
|
||||||
|
|
@ -418,6 +442,18 @@ mod tests {
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
serde_test::assert_de_tokens(
|
||||||
|
&ResourcePart(String::from("test")),
|
||||||
|
&[
|
||||||
|
serde_test::Token::TupleStruct {
|
||||||
|
name: "ResourcePart",
|
||||||
|
len: 1,
|
||||||
|
},
|
||||||
|
serde_test::Token::String("test"),
|
||||||
|
serde_test::Token::TupleStructEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
serde_test::assert_de_tokens_error::<ResourcePart>(
|
serde_test::assert_de_tokens_error::<ResourcePart>(
|
||||||
&[
|
&[
|
||||||
serde_test::Token::TupleStruct {
|
serde_test::Token::TupleStruct {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue