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> Freeze for StringWithSeparator<Sep, T>
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