use crate::{RCodec, WCodec, Zenoh080};
use alloc::vec::Vec;
use zenoh_buffers::{
reader::{DidntRead, Reader},
writer::{DidntWrite, Writer},
};
use zenoh_protocol::core::Property;
impl<W> WCodec<&Property, &mut W> for Zenoh080
where
W: Writer,
{
type Output = Result<(), DidntWrite>;
fn write(self, writer: &mut W, x: &Property) -> Self::Output {
let Property { key, value } = x;
self.write(&mut *writer, key)?;
self.write(&mut *writer, value.as_slice())?;
Ok(())
}
}
impl<R> RCodec<Property, &mut R> for Zenoh080
where
R: Reader,
{
type Error = DidntRead;
fn read(self, reader: &mut R) -> Result<Property, Self::Error> {
let key: u64 = self.read(&mut *reader)?;
let value: Vec<u8> = self.read(&mut *reader)?;
Ok(Property { key, value })
}
}
impl<W> WCodec<&[Property], &mut W> for Zenoh080
where
W: Writer,
{
type Output = Result<(), DidntWrite>;
fn write(self, writer: &mut W, x: &[Property]) -> Self::Output {
self.write(&mut *writer, x.len())?;
for p in x.iter() {
self.write(&mut *writer, p)?;
}
Ok(())
}
}
impl<R> RCodec<Vec<Property>, &mut R> for Zenoh080
where
R: Reader,
{
type Error = DidntRead;
fn read(self, reader: &mut R) -> Result<Vec<Property>, Self::Error> {
let num: usize = self.read(&mut *reader)?;
let mut ps = Vec::with_capacity(num);
for _ in 0..num {
let p: Property = self.read(&mut *reader)?;
ps.push(p);
}
Ok(ps)
}
}