Struct serde_with::rust::StringWithSeparator
source · pub struct StringWithSeparator<Sep>(_);
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.
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§
source§impl<Sep> StringWithSeparator<Sep>where
Sep: Separator,
impl<Sep> StringWithSeparator<Sep>where
Sep: Separator,
sourcepub 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
sourcepub 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§
source§impl<Sep: Clone> Clone for StringWithSeparator<Sep>
impl<Sep: Clone> Clone for StringWithSeparator<Sep>
source§fn clone(&self) -> StringWithSeparator<Sep>
fn clone(&self) -> StringWithSeparator<Sep>
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moresource§impl<Sep: Debug> Debug for StringWithSeparator<Sep>
impl<Sep: Debug> Debug for StringWithSeparator<Sep>
source§impl<Sep: Default> Default for StringWithSeparator<Sep>
impl<Sep: Default> Default for StringWithSeparator<Sep>
source§fn default() -> StringWithSeparator<Sep>
fn default() -> StringWithSeparator<Sep>
Returns the “default value” for a type. Read more
source§impl<Sep: Hash> Hash for StringWithSeparator<Sep>
impl<Sep: Hash> Hash for StringWithSeparator<Sep>
source§impl<Sep: Ord> Ord for StringWithSeparator<Sep>
impl<Sep: Ord> Ord for StringWithSeparator<Sep>
source§fn cmp(&self, other: &StringWithSeparator<Sep>) -> Ordering
fn cmp(&self, other: &StringWithSeparator<Sep>) -> Ordering
1.21.0 · source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Compares and returns the maximum of two values. Read more
source§impl<Sep: PartialEq> PartialEq<StringWithSeparator<Sep>> for StringWithSeparator<Sep>
impl<Sep: PartialEq> PartialEq<StringWithSeparator<Sep>> for StringWithSeparator<Sep>
source§fn eq(&self, other: &StringWithSeparator<Sep>) -> bool
fn eq(&self, other: &StringWithSeparator<Sep>) -> bool
source§impl<Sep: PartialOrd> PartialOrd<StringWithSeparator<Sep>> for StringWithSeparator<Sep>
impl<Sep: PartialOrd> PartialOrd<StringWithSeparator<Sep>> for StringWithSeparator<Sep>
source§fn partial_cmp(&self, other: &StringWithSeparator<Sep>) -> Option<Ordering>
fn partial_cmp(&self, other: &StringWithSeparator<Sep>) -> Option<Ordering>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for
self
and other
) and is used by the <=
operator. Read more