1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use xdr_codec::{Pack, Write, Result};
use ::time_bounds::{UnixTimestamp, TimeBounds};
use ::xdr::ToXdr;

fn time_bound_as_int(t: &Option<UnixTimestamp>) -> i64 {
    match *t {
        None => 0,
        Some(n) => n.clone(),
    }
}

impl<W: Write> Pack<W> for TimeBounds {
    fn pack(&self, out: &mut W) -> Result<usize> {
        let lower = time_bound_as_int(self.lower());
        let upper = time_bound_as_int(self.upper());
        Ok(lower.pack(out)? + upper.pack(out)?)
    }
}

impl ToXdr for TimeBounds {
    fn to_writer<W: Write>(&self, mut buf: W) -> ::error::Result<usize> {
        let r = self.pack(&mut buf)?;
        Ok(r)
    }
}