#[derive(Debug, Eq, PartialEq, Clone)]
pub enum Bar { A(i32), B(i32), C, default(Vec<u8>), }
#[derive(Debug, Eq, PartialEq, Copy, Clone)]
pub enum Foo { A = 0isize, B = 1isize, C = 2isize, }
impl <Out: xdr_codec::Write> xdr_codec::Pack<Out> for Bar {
#[inline]
fn pack(&self, out: &mut Out) -> xdr_codec::Result<usize> {
Ok(match self {
Bar::A(val) =>
try!(Foo :: A . pack ( out )) + try!(val . pack ( out )),
Bar::B(val) =>
try!(Foo :: B . pack ( out )) + try!(val . pack ( out )),
Bar::C => try!(Foo :: C . pack ( out )),
Bar::default(..) =>
return Err(xdr_codec::Error::invalidcase()),
})
}
}
impl <Out: xdr_codec::Write> xdr_codec::Pack<Out> for Foo {
#[inline]
fn pack(&self, out: &mut Out) -> xdr_codec::Result<usize> {
Ok(try!(( * self as i32 ) . pack ( out )))
}
}
impl <In: xdr_codec::Read> xdr_codec::Unpack<In> for Bar {
#[inline]
fn unpack(input: &mut In) -> xdr_codec::Result<(Bar, usize)> {
let mut sz = 0;
Ok((match {
let (v, dsz) =
try!(xdr_codec:: Unpack:: unpack ( input ));
sz += dsz;
v
} {
Foo::A =>
Bar::A({
let (v, csz) =
try!(xdr_codec:: Unpack:: unpack ( input ));
sz += csz;
v
}),
Foo::B =>
Bar::B({
let (v, csz) =
try!(xdr_codec:: Unpack:: unpack ( input ));
sz += csz;
v
}),
Foo::C => Bar::C,
_ =>
Bar::default({
let (v, csz) =
try!(xdr_codec:: Unpack:: unpack ( input
));
sz += csz;
v
}),
}, sz))
}
}
impl <In: xdr_codec::Read> xdr_codec::Unpack<In> for Foo {
#[inline]
fn unpack(input: &mut In) -> xdr_codec::Result<(Foo, usize)> {
let mut sz = 0;
Ok(({
let (e, esz) = try!(xdr_codec:: Unpack:: unpack ( input ));
sz += esz;
match e {
0i64 => Foo::A,
1i64 => Foo::B,
2i64 => Foo::C,
_ => return xdr_codec::Error::invalidenum(),
}
}, sz))
}
}