pub struct BytesOrString;Expand description
Deserialize from bytes or string
Any Rust String can be converted into bytes, i.e., Vec<u8>.
Accepting both as formats while deserializing can be helpful while interacting with language
which have a looser definition of string than Rust.
§Example
#[serde_as]
#[derive(Deserialize, Serialize)]
struct A {
#[serde_as(as = "BytesOrString")]
bytes_or_string: Vec<u8>,
}
// Here we deserialize from a byte array ...
let j = json!({
"bytes_or_string": [
0,
1,
2,
3
]
});
let a: A = serde_json::from_value(j.clone()).unwrap();
assert_eq!(vec![0, 1, 2, 3], a.bytes_or_string);
// and serialization works too.
assert_eq!(j, serde_json::to_value(&a).unwrap());
// But we also support deserializing from a String
let j = json!({
"bytes_or_string": "✨Works!"
});
let a: A = serde_json::from_value(j).unwrap();
assert_eq!("✨Works!".as_bytes(), &*a.bytes_or_string);Trait Implementations§
Source§impl<'de> DeserializeAs<'de, Vec<u8>> for BytesOrString
Available on crate feature alloc only.
impl<'de> DeserializeAs<'de, Vec<u8>> for BytesOrString
Available on crate feature
alloc only.Source§fn deserialize_as<D>(deserializer: D) -> Result<Vec<u8>, D::Error>where
D: Deserializer<'de>,
fn deserialize_as<D>(deserializer: D) -> Result<Vec<u8>, D::Error>where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer.
Source§impl SerializeAs<Vec<u8>> for BytesOrString
Available on crate feature alloc only.
impl SerializeAs<Vec<u8>> for BytesOrString
Available on crate feature
alloc only.Source§fn serialize_as<S>(source: &Vec<u8>, serializer: S) -> Result<S::Ok, S::Error>where
S: Serializer,
fn serialize_as<S>(source: &Vec<u8>, serializer: S) -> Result<S::Ok, S::Error>where
S: Serializer,
Serialize this value into the given Serde serializer.
Auto Trait Implementations§
impl Freeze for BytesOrString
impl RefUnwindSafe for BytesOrString
impl Send for BytesOrString
impl Sync for BytesOrString
impl Unpin for BytesOrString
impl UnsafeUnpin for BytesOrString
impl UnwindSafe for BytesOrString
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