use serde::Deserialize;
use rmpv::{self, ValueRef};
use Error;
use protocol;
#[derive(Debug, Deserialize, PartialEq)]
pub struct HeaderRef<'a> {
cached: bool,
name: &'a [u8],
data: &'a [u8],
}
impl<'a> HeaderRef<'a> {
#[inline]
pub fn name(&self) -> &[u8] {
self.name
}
#[inline]
pub fn data(&self) -> &[u8] {
self.data
}
}
#[derive(Debug)]
pub struct Response<'a: 'b, 'b> {
ty: u64,
args: &'b ValueRef<'a>,
meta: Vec<HeaderRef<'b>>,
}
impl<'a: 'b, 'b> Response<'a, 'b> {
pub(crate) fn new(ty: u64, args: &'b ValueRef<'a>, _meta: &'b ValueRef<'a>) -> Result<Self, rmpv::ext::Error> {
let resp = Self {
ty: ty,
args: args,
meta: Vec::new(), };
Ok(resp)
}
#[inline]
pub fn ty(&self) -> u64 {
self.ty
}
#[inline]
pub fn deserialize<T: Deserialize<'b>>(&self) -> Result<T, Error> {
protocol::deserialize(self.ty, self.args)
}
#[inline]
pub fn headers(&self) -> &[HeaderRef] {
&self.meta
}
}