Struct serde_with::StringWithSeparator
source · pub struct StringWithSeparator<Sep, T>(/* private fields */);Expand description
De/Serialize a delimited collection using Display and FromStr implementation
StringWithSeparator takes a second type, which needs to implement Display+FromStr and constitutes the inner type of the collection.
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.
Examples
use serde_with::formats::{CommaSeparator, SpaceSeparator};
use std::collections::BTreeSet;
#[serde_as]
#[derive(Deserialize, Serialize)]
struct A {
#[serde_as(as = "StringWithSeparator::<SpaceSeparator, String>")]
tags: Vec<String>,
#[serde_as(as = "StringWithSeparator::<CommaSeparator, String>")]
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()
);Trait Implementations§
source§impl<'de, SEPARATOR, I, T> DeserializeAs<'de, I> for StringWithSeparator<SEPARATOR, T>
impl<'de, SEPARATOR, I, T> DeserializeAs<'de, I> for StringWithSeparator<SEPARATOR, T>
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<SEPARATOR, I, T> SerializeAs<I> for StringWithSeparator<SEPARATOR, T>
impl<SEPARATOR, I, T> SerializeAs<I> for StringWithSeparator<SEPARATOR, T>
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.
Auto Trait Implementations§
impl<Sep, T> RefUnwindSafe for StringWithSeparator<Sep, T>where
Sep: RefUnwindSafe,
T: RefUnwindSafe,
impl<Sep, T> Send for StringWithSeparator<Sep, T>
impl<Sep, T> Sync for StringWithSeparator<Sep, T>
impl<Sep, T> Unpin for StringWithSeparator<Sep, T>
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