parent
2004e7b21f
commit
ecb55ed32a
2 changed files with 9 additions and 60 deletions
|
|
@ -3,16 +3,16 @@
|
|||
//
|
||||
// Not useful outside of librqbit.
|
||||
|
||||
use std::marker::PhantomData;
|
||||
|
||||
use serde::Deserializer;
|
||||
use serde::Deserialize;
|
||||
|
||||
use clone_to_owned::CloneToOwned;
|
||||
|
||||
#[derive(Default, PartialEq, Eq, Hash, Clone, PartialOrd, Ord)]
|
||||
#[derive(Default, Deserialize, PartialEq, Eq, Hash, Clone, PartialOrd, Ord)]
|
||||
#[serde(transparent)]
|
||||
pub struct ByteBufOwned(pub Box<[u8]>);
|
||||
|
||||
#[derive(Default, PartialEq, Eq, Hash, Clone, PartialOrd, Ord)]
|
||||
#[derive(Default, Deserialize, PartialEq, Eq, Hash, Clone, PartialOrd, Ord)]
|
||||
#[serde(transparent)]
|
||||
pub struct ByteBuf<'a>(pub &'a [u8]);
|
||||
|
||||
pub trait ByteBufT {
|
||||
|
|
@ -170,54 +170,3 @@ impl serde::ser::Serialize for ByteBufOwned {
|
|||
serializer.serialize_bytes(self.as_slice())
|
||||
}
|
||||
}
|
||||
|
||||
impl<'de> serde::de::Deserialize<'de> for ByteBufOwned {
|
||||
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
||||
where
|
||||
D: Deserializer<'de>,
|
||||
{
|
||||
struct Visitor;
|
||||
|
||||
impl<'de> serde::de::Visitor<'de> for Visitor {
|
||||
type Value = ByteBufOwned;
|
||||
|
||||
fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
|
||||
formatter.write_str("byte string")
|
||||
}
|
||||
fn visit_bytes<E>(self, v: &[u8]) -> Result<Self::Value, E>
|
||||
where
|
||||
E: serde::de::Error,
|
||||
{
|
||||
Ok(ByteBufOwned::from(v.to_owned()))
|
||||
}
|
||||
}
|
||||
Ok(deserializer.deserialize_byte_buf(Visitor {})?)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'de: 'a, 'a> serde::de::Deserialize<'de> for ByteBuf<'a> {
|
||||
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
||||
where
|
||||
D: Deserializer<'de>,
|
||||
{
|
||||
#[derive(Default)]
|
||||
struct Visitor<'a> {
|
||||
_p: PhantomData<&'a ()>,
|
||||
}
|
||||
|
||||
impl<'de: 'a, 'a> serde::de::Visitor<'de> for Visitor<'a> {
|
||||
type Value = ByteBuf<'a>;
|
||||
|
||||
fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
|
||||
formatter.write_str("byte string")
|
||||
}
|
||||
fn visit_borrowed_bytes<E>(self, v: &'de [u8]) -> Result<Self::Value, E>
|
||||
where
|
||||
E: serde::de::Error,
|
||||
{
|
||||
Ok(ByteBuf::from(v))
|
||||
}
|
||||
}
|
||||
Ok(deserializer.deserialize_byte_buf(Visitor::default())?)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue