Struct serde_with::StringWithSeparator
source · pub struct StringWithSeparator<Sep, T = ()>(/* private fields */);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§
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, T: Clone> Clone for StringWithSeparator<Sep, T>
impl<Sep: Clone, T: Clone> Clone for StringWithSeparator<Sep, T>
source§fn clone(&self) -> StringWithSeparator<Sep, T>
fn clone(&self) -> StringWithSeparator<Sep, T>
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: Default, T: Default> Default for StringWithSeparator<Sep, T>
impl<Sep: Default, T: Default> Default for StringWithSeparator<Sep, T>
source§fn default() -> StringWithSeparator<Sep, T>
fn default() -> StringWithSeparator<Sep, T>
Returns the “default value” for a type. Read more
source§impl<'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,
source§fn 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.
source§impl<Sep: Ord, T: Ord> Ord for StringWithSeparator<Sep, T>
impl<Sep: Ord, T: Ord> Ord for StringWithSeparator<Sep, T>
source§fn cmp(&self, other: &StringWithSeparator<Sep, T>) -> Ordering
fn cmp(&self, other: &StringWithSeparator<Sep, T>) -> 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, T: PartialEq> PartialEq for StringWithSeparator<Sep, T>
impl<Sep: PartialEq, T: PartialEq> PartialEq for StringWithSeparator<Sep, T>
source§fn 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 ==.source§impl<Sep: PartialOrd, T: PartialOrd> PartialOrd for StringWithSeparator<Sep, T>
impl<Sep: PartialOrd, T: PartialOrd> PartialOrd for StringWithSeparator<Sep, T>
source§fn partial_cmp(&self, other: &StringWithSeparator<Sep, T>) -> Option<Ordering>
fn partial_cmp(&self, other: &StringWithSeparator<Sep, T>) -> 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 moresource§impl<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,
source§fn 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§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more