1use serde::de::{Deserializer, Error, SeqAccess, Visitor}; 2use std::fmt; 3 4pub fn deserialize<'de, D>(deserializer: D) -> Result<Vec<u8>, D::Error> 5where 6 D: Deserializer<'de>, 7{ 8 deserializer.deserialize_byte_buf(ByteBufVisitor) 9} 10 11struct ByteBufVisitor; 12 13impl<'de> Visitor<'de> for ByteBufVisitor { 14 type Value = Vec<u8>; 15 16 fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { 17 formatter.write_str("byte array") 18 } 19 20 fn visit_seq<V>(self, mut visitor: V) -> Result<Self::Value, V::Error> 21 where 22 V: SeqAccess<'de>, 23 { 24 let mut values = Vec::new(); 25 while let Some(value) = visitor.next_element()? { 26 values.push(value); 27 } 28 Ok(values) 29 } 30 31 fn visit_bytes<E>(self, v: &[u8]) -> Result<Self::Value, E> 32 where 33 E: Error, 34 { 35 Ok(v.to_vec()) 36 } 37 38 fn visit_byte_buf<E>(self, v: Vec<u8>) -> Result<Self::Value, E> 39 where 40 E: Error, 41 { 42 Ok(v) 43 } 44 45 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> 46 where 47 E: Error, 48 { 49 Ok(v.as_bytes().to_vec()) 50 } 51 52 fn visit_string<E>(self, v: String) -> Result<Self::Value, E> 53 where 54 E: Error, 55 { 56 Ok(v.into_bytes()) 57 } 58} 59