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
26
27
28
29
30
31
32
33
34
35
36
37
38
use error::Result;
use xdr::{FromXdr, ToXdr};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TimeBounds {
    pub lower: u64,
    pub upper: u64,
}

impl ToXdr<TimeBounds> for ::TimeBounds {
    fn to_xdr(&self) -> Result<TimeBounds> {
        let lower = match *self.lower() {
            None => 0,
            Some(ref t) => t.0 as u64,
        };
        let upper = match *self.upper() {
            None => 0,
            Some(ref t) => t.0 as u64,
        };
        Ok(TimeBounds { lower, upper })
    }
}

impl<'de> FromXdr<'de, TimeBounds> for ::TimeBounds {
    fn from_xdr(time: TimeBounds) -> Result<::TimeBounds> {
        let lower = if time.lower == 0 {
            None
        } else {
            Some(::UnixTimestamp(time.lower as i64))
        };
        let upper = if time.upper == 0 {
            None
        } else {
            Some(::UnixTimestamp(time.upper as i64))
        };
        Ok(::TimeBounds::new(lower, upper))
    }
}