openapi_context/
base64_format.rs1#![allow(dead_code)]
4#[cfg(feature = "serdejson")]
5use base64::{decode, encode};
6#[cfg(feature = "serdejson")]
7use serde::de::{Deserialize, Deserializer, Error};
8#[cfg(feature = "serdejson")]
9use serde::ser::{Serialize, Serializer};
10use std::ops::{Deref, DerefMut};
11
12#[derive(Debug, Clone, PartialEq, PartialOrd)]
13pub struct ByteArray(pub Vec<u8>);
15
16#[cfg(feature = "serdejson")]
17impl Serialize for ByteArray {
18 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
19 where
20 S: Serializer,
21 {
22 serializer.serialize_str(&encode(&self.0))
23 }
24}
25
26#[cfg(feature = "serdejson")]
27impl<'de> Deserialize<'de> for ByteArray {
28 fn deserialize<D>(deserializer: D) -> Result<ByteArray, D::Error>
29 where
30 D: Deserializer<'de>,
31 {
32 let s = String::deserialize(deserializer)?;
33 match decode(&s) {
34 Ok(bin) => Ok(ByteArray(bin)),
35 _ => Err(D::Error::custom("invalid base64")),
36 }
37 }
38}
39
40impl Deref for ByteArray {
41 type Target = Vec<u8>;
42 fn deref(&self) -> &Vec<u8> {
43 &self.0
44 }
45}
46
47impl DerefMut for ByteArray {
48 fn deref_mut(&mut self) -> &mut Vec<u8> {
49 &mut self.0
50 }
51}