use std::fmt; use serde::{Deserialize, Deserializer, de::{self, Visitor}}; use crate::strand::StrandBuf; impl<'de> Deserialize<'de> for StrandBuf { fn deserialize(deserializer: D) -> Result where D: Deserializer<'de>, { struct V; impl<'de> Visitor<'de> for V { type Value = StrandBuf; fn expecting(&self, f: &mut fmt::Formatter) -> fmt::Result { f.write_str("a string or bytes") } fn visit_str(self, v: &str) -> Result { Ok(StrandBuf::Utf8(v.to_owned())) } fn visit_string(self, v: String) -> Result { Ok(StrandBuf::Utf8(v)) } fn visit_bytes(self, v: &[u8]) -> Result { Ok(StrandBuf::Bytes(v.to_owned())) } fn visit_byte_buf(self, v: Vec) -> Result { Ok(StrandBuf::Bytes(v)) } } deserializer.deserialize_any(V) } }