diff --git a/src/msg.rs b/src/msg.rs index f8717bc..34fad64 100644 --- a/src/msg.rs +++ b/src/msg.rs @@ -1,3 +1,7 @@ +use std::ops; + +const BILLION: i64 = 1000000000; + #[derive(Serialize,Deserialize,Debug)] pub struct Time { pub sec: i32, @@ -8,6 +12,17 @@ impl Time { pub fn new() -> Time { Time { sec: 0, nsec: 0 } } + + pub fn from_nanos(t: i64) -> Time { + Time { + sec: (t / BILLION) as i32, + nsec: (t % BILLION) as i32, + } + } + + fn nanos(self) -> i64 { + self.sec as i64 * BILLION + self.nsec as i64 + } } #[derive(Serialize,Deserialize,Debug)] @@ -20,4 +35,101 @@ impl Duration { pub fn new() -> Duration { Duration { sec: 0, nsec: 0 } } + + pub fn from_nanos(t: i64) -> Duration { + Duration { + sec: (t / BILLION) as i32, + nsec: (t % BILLION) as i32, + } + } + + fn nanos(self) -> i64 { + self.sec as i64 * BILLION + self.nsec as i64 + } +} + +impl ops::Add for Time { + type Output = Time; + fn add(self, rhs: Duration) -> Self::Output { + Time::from_nanos(self.nanos() + rhs.nanos()) + } +} + +impl ops::Add for Duration { + type Output = Duration; + fn add(self, rhs: Duration) -> Self::Output { + Duration::from_nanos(self.nanos() + rhs.nanos()) + } +} + +impl ops::Sub