use fd;
use std::ops::Deref;
use values;
use Argdata;
pub struct ArgdataRef<'a, 'd: 'a> {
inner: Inner<'a, 'd>,
}
impl<'a, 'd: 'a> ArgdataRef<'a, 'd> {
pub fn encoded(bytes: &'d [u8], convert_fd: &'a (fd::ConvertFd + 'a)) -> ArgdataRef<'a, 'd> {
ArgdataRef {
inner: Inner::Encoded(::encoded_with_fds(bytes, convert_fd)),
}
}
pub fn reference(value: &'a (Argdata<'d> + 'a)) -> ArgdataRef<'a, 'd> {
ArgdataRef {
inner: Inner::Reference(value),
}
}
}
pub enum Inner<'a, 'd: 'a> {
Encoded(values::EncodedArgdata<'d, &'a fd::ConvertFd>),
Reference(&'a Argdata<'d>),
}
impl<'a, 'd: 'a> Deref for ArgdataRef<'a, 'd> {
type Target = Argdata<'d> + 'a;
fn deref(&self) -> &Self::Target {
match &self.inner {
&Inner::Encoded(ref argdata) => argdata,
&Inner::Reference(argdata) => argdata,
}
}
}