Struct serde_with::StringWithSeparator 
source · [−]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
sourceimpl<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
sourceimpl<Sep: Clone, T: Clone> Clone for StringWithSeparator<Sep, T>
 
impl<Sep: Clone, T: Clone> Clone for StringWithSeparator<Sep, T>
sourcefn clone(&self) -> StringWithSeparator<Sep, T>
 
fn clone(&self) -> StringWithSeparator<Sep, T>
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
 
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source. Read more
sourceimpl<Sep: Debug, T: Debug> Debug for StringWithSeparator<Sep, T>
 
impl<Sep: Debug, T: Debug> Debug for StringWithSeparator<Sep, T>
sourceimpl<Sep: Default, T: Default> Default for StringWithSeparator<Sep, T>
 
impl<Sep: Default, T: Default> Default for StringWithSeparator<Sep, T>
sourcefn default() -> StringWithSeparator<Sep, T>
 
fn default() -> StringWithSeparator<Sep, T>
Returns the “default value” for a type. Read more
sourceimpl<'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, 
sourcefn deserialize_as<D>(deserializer: D) -> Result<I, D::Error> where
    D: Deserializer<'de>, 
 
fn deserialize_as<D>(deserializer: D) -> Result<I, D::Error> where
    D: Deserializer<'de>, 
Deserialize this value from the given Serde deserializer.
sourceimpl<Sep: Hash, T: Hash> Hash for StringWithSeparator<Sep, T>
 
impl<Sep: Hash, T: Hash> Hash for StringWithSeparator<Sep, T>
sourceimpl<Sep: Ord, T: Ord> Ord for StringWithSeparator<Sep, T>
 
impl<Sep: Ord, T: Ord> Ord for StringWithSeparator<Sep, T>
sourceimpl<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>
sourcefn eq(&self, other: &StringWithSeparator<Sep, T>) -> bool
 
fn eq(&self, other: &StringWithSeparator<Sep, T>) -> bool
This method tests for self and other values to be equal, and is used
by ==. Read more
sourcefn ne(&self, other: &StringWithSeparator<Sep, T>) -> bool
 
fn ne(&self, other: &StringWithSeparator<Sep, T>) -> bool
This method tests for !=.
sourceimpl<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>
sourcefn partial_cmp(&self, other: &StringWithSeparator<Sep, T>) -> Option<Ordering>
 
fn partial_cmp(&self, other: &StringWithSeparator<Sep, T>) -> Option<Ordering>
This method returns an ordering between self and other values if one exists. Read more
1.0.0 · sourcefn lt(&self, other: &Rhs) -> bool
 
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · sourcefn 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
sourceimpl<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, 
sourcefn serialize_as<S>(source: &I, serializer: S) -> Result<S::Ok, S::Error> where
    S: Serializer, 
 
fn serialize_as<S>(source: &I, serializer: S) -> Result<S::Ok, S::Error> where
    S: Serializer, 
Serialize this value into the given Serde serializer.
impl<Sep: Copy, T: Copy> Copy for StringWithSeparator<Sep, T>
impl<Sep: Eq, T: Eq> Eq for StringWithSeparator<Sep, T>
impl<Sep, T> StructuralEq for StringWithSeparator<Sep, T>
impl<Sep, T> StructuralPartialEq for StringWithSeparator<Sep, T>
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
sourceimpl<T> BorrowMut<T> for T where
    T: ?Sized, 
 
impl<T> BorrowMut<T> for T where
    T: ?Sized, 
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
 
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more