[][src]Struct serde_with::rust::StringWithSeparator

pub struct StringWithSeparator<Sep, T = ()>(_);

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.

struct A {
    #[serde_as(as = "StringWithSeparator::<SpaceSeparator, String>")]
    tags: Vec<String>,


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"
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());


impl<Sep> StringWithSeparator<Sep> where
    Sep: Separator

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

Deserialize a collection from a string with separator symbol

Trait Implementations

impl<Sep: Clone, T: Clone> Clone for StringWithSeparator<Sep, T>[src]

impl<Sep: Copy, T: Copy> Copy for StringWithSeparator<Sep, T>[src]

impl<Sep: Debug, T: Debug> Debug for StringWithSeparator<Sep, T>[src]

impl<Sep: Default, T: Default> Default for StringWithSeparator<Sep, T>[src]

impl<'de, SEPARATOR, I, T> DeserializeAs<'de, I> for StringWithSeparator<SEPARATOR, T> where
    SEPARATOR: Separator,
    I: FromIterator<T>,
    T: FromStr,
    T::Err: Display

impl<Sep: Eq, T: Eq> Eq for StringWithSeparator<Sep, T>[src]

impl<Sep: Hash, T: Hash> Hash for StringWithSeparator<Sep, T>[src]

impl<Sep: Ord, T: Ord> Ord for StringWithSeparator<Sep, T>[src]

impl<Sep: PartialEq, T: PartialEq> PartialEq<StringWithSeparator<Sep, T>> for StringWithSeparator<Sep, T>[src]

impl<Sep: PartialOrd, T: PartialOrd> PartialOrd<StringWithSeparator<Sep, T>> for StringWithSeparator<Sep, T>[src]

impl<SEPARATOR, I, T> SerializeAs<I> for StringWithSeparator<SEPARATOR, T> where
    SEPARATOR: Separator,
    &'a I: IntoIterator<Item = &'a T>,
    T: ToString

impl<Sep, T> StructuralEq for StringWithSeparator<Sep, T>[src]

impl<Sep, T> StructuralPartialEq for StringWithSeparator<Sep, T>[src]

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

impl<T> Any for T where
    T: 'static + ?Sized

impl<T> Borrow<T> for T where
    T: ?Sized

impl<T> BorrowMut<T> for T where
    T: ?Sized

impl<Q, K> Equivalent<K> for Q where
    K: Borrow<Q> + ?Sized,
    Q: Eq + ?Sized

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 

impl<T> ToOwned for T where
    T: Clone

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.