xdrgen 0.1.5

XDR codec generator from specification and runtime library

// GENERATED CODE
//
// Generated from c.x.
//
// DO NOT EDIT


#[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))
    }
}