pykrete_jsonwebkey/
byte_vec.rs1use serde::{Deserialize, Serialize};
2use zeroize::Zeroize;
3
4#[derive(Clone, PartialEq, Eq, Zeroize, Serialize, Deserialize)]
6#[zeroize(drop)]
7#[serde(transparent)]
8pub struct ByteVec(#[serde(with = "crate::utils::serde_base64")] Vec<u8>);
9
10impl std::fmt::Debug for ByteVec {
11 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
12 f.write_str(&crate::utils::base64_encode(&self.0))
13 }
14}
15
16impl<T: Into<Vec<u8>>> From<T> for ByteVec {
17 fn from(into_vec: T) -> Self {
18 Self(into_vec.into())
19 }
20}
21
22impl AsRef<[u8]> for ByteVec {
23 fn as_ref(&self) -> &[u8] {
24 &self.0
25 }
26}
27
28impl std::ops::Deref for ByteVec {
29 type Target = [u8];
30 fn deref(&self) -> &Self::Target {
31 &self.0
32 }
33}
34
35#[cfg(test)]
36mod tests {
37 use super::*;
38
39 static BYTES: &[u8] = &[1, 2, 3, 4, 5, 6, 7];
40 static BASE64_JSON: &str = "\"AQIDBAUGBw\"";
41
42 #[test]
43 fn test_serde_byte_vec() {
44 let b64 = serde_json::to_string(&ByteVec(BYTES.to_vec())).unwrap();
45 assert_eq!(b64, BASE64_JSON);
46 let bytes: ByteVec = serde_json::from_str(&b64).unwrap();
47 assert_eq!(bytes.as_ref(), BYTES);
48 }
49}