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