Struct serde_with::rust::StringWithSeparator [−][src]
pub struct StringWithSeparator<Sep, T = ()>(_);Expand description
De/Serialize a delimited collection using Display and FromStr implementation
You can define an arbitrary separator, by specifying a type which implements Separator.
Some common ones, like space and comma are already predefined and you can find them here.
An empty string deserializes as an empty collection.
Converting to serde_as
The same functionality can also be expressed using the serde_as macro.
The usage is slightly different.
StringWithSeparator takes a second type, which needs to implement Display+FromStr and constitutes the inner type of the collection.
#[serde_as]
#[derive(Deserialize)]
struct A {
#[serde_as(as = "StringWithSeparator::<SpaceSeparator, String>")]
tags: Vec<String>,
}Examples
use serde_with::{CommaSeparator, SpaceSeparator};
use std::collections::BTreeSet;
#[derive(Deserialize, Serialize)]
struct A {
#[serde(with = "serde_with::rust::StringWithSeparator::<SpaceSeparator>")]
tags: Vec<String>,
#[serde(with = "serde_with::rust::StringWithSeparator::<CommaSeparator>")]
more_tags: BTreeSet<String>,
}
let v: A = serde_json::from_str(r##"{
"tags": "#hello #world",
"more_tags": "foo,bar,bar"
}"##).unwrap();
assert_eq!(vec!["#hello", "#world"], v.tags);
assert_eq!(2, v.more_tags.len());
let x = A {
tags: vec!["1".to_string(), "2".to_string(), "3".to_string()],
more_tags: BTreeSet::new(),
};
assert_eq!(
r#"{"tags":"1 2 3","more_tags":""}"#,
serde_json::to_string(&x).unwrap()
);Implementations
pub fn serialize<S, T, V>(values: T, serializer: S) -> Result<S::Ok, S::Error> where
S: Serializer,
T: IntoIterator<Item = V>,
V: Display,
pub fn serialize<S, T, V>(values: T, serializer: S) -> Result<S::Ok, S::Error> where
S: Serializer,
T: IntoIterator<Item = V>,
V: Display,
Serialize collection into a string with separator symbol
pub fn deserialize<'de, D, T, V>(deserializer: D) -> Result<T, D::Error> where
D: Deserializer<'de>,
T: FromIterator<V>,
V: FromStr,
V::Err: Display,
pub fn deserialize<'de, D, T, V>(deserializer: D) -> Result<T, D::Error> where
D: Deserializer<'de>,
T: FromIterator<V>,
V: FromStr,
V::Err: Display,
Deserialize a collection from a string with separator symbol
Trait Implementations
Returns the “default value” for a type. Read more
impl<'de, SEPARATOR, I, T> DeserializeAs<'de, I> for StringWithSeparator<SEPARATOR, T> where
SEPARATOR: Separator,
I: FromIterator<T>,
T: FromStr,
T::Err: Display,
impl<'de, SEPARATOR, I, T> DeserializeAs<'de, I> for StringWithSeparator<SEPARATOR, T> where
SEPARATOR: Separator,
I: FromIterator<T>,
T: FromStr,
T::Err: Display,
Deserialize this value from the given Serde deserializer.
impl<Sep: PartialEq, T: PartialEq> PartialEq<StringWithSeparator<Sep, T>> for StringWithSeparator<Sep, T>
impl<Sep: PartialEq, T: PartialEq> PartialEq<StringWithSeparator<Sep, T>> for StringWithSeparator<Sep, T>
This method tests for self and other values to be equal, and is used
by ==. Read more
This method tests for !=.
impl<Sep: PartialOrd, T: PartialOrd> PartialOrd<StringWithSeparator<Sep, T>> for StringWithSeparator<Sep, T>
impl<Sep: PartialOrd, T: PartialOrd> PartialOrd<StringWithSeparator<Sep, T>> for StringWithSeparator<Sep, T>
This method returns an ordering between self and other values if one exists. Read more
This method tests less than (for self and other) and is used by the < operator. Read more
This method tests less than or equal to (for self and other) and is used by the <=
operator. Read more
This method tests greater than (for self and other) and is used by the > operator. Read more
impl<SEPARATOR, I, T> SerializeAs<I> for StringWithSeparator<SEPARATOR, T> where
SEPARATOR: Separator,
for<'a> &'a I: IntoIterator<Item = &'a T>,
T: ToString,
impl<SEPARATOR, I, T> SerializeAs<I> for StringWithSeparator<SEPARATOR, T> where
SEPARATOR: Separator,
for<'a> &'a I: IntoIterator<Item = &'a T>,
T: ToString,
Serialize this value into the given Serde serializer.
Auto Trait Implementations
impl<Sep, T> RefUnwindSafe for StringWithSeparator<Sep, T> where
Sep: RefUnwindSafe,
T: RefUnwindSafe,
impl<Sep, T> Send for StringWithSeparator<Sep, T> where
Sep: Send,
T: Send,
impl<Sep, T> Sync for StringWithSeparator<Sep, T> where
Sep: Sync,
T: Sync,
impl<Sep, T> Unpin for StringWithSeparator<Sep, T> where
Sep: Unpin,
T: Unpin,
impl<Sep, T> UnwindSafe for StringWithSeparator<Sep, T> where
Sep: UnwindSafe,
T: UnwindSafe,
Blanket Implementations
Mutably borrows from an owned value. Read more
Compare self to key and return true if they are equal.