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