Struct serde_with::BytesOrString
source · 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, Global>> for BytesOrString
impl<'de> DeserializeAs<'de, Vec<u8, Global>> for BytesOrString
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, Global>> for BytesOrString
impl SerializeAs<Vec<u8, Global>> for BytesOrString
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.