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