use std::time;
use std::ops::{
Add,
Sub
};
use super::{
Point,
Span
};
impl Point {
pub const fn from_epoch(timestamp: i64) -> Self {
Self {timestamp}
}
pub fn now() -> Self {
let sys = time::SystemTime::now();
let timestamp = match sys.duration_since(time::UNIX_EPOCH) {
Ok(duration) => duration.as_secs() as i64,
Err(err) => -(err.duration().as_secs() as i64)
};
Self {timestamp}
}
}
impl Add<Span> for Point {
type Output = Self;
fn add(self, rhs: Span) -> Self::Output {
let timestamp = self.timestamp + rhs.seconds as i64;
Self {timestamp}
}
}
impl Sub<Span> for Point {
type Output = Self;
fn sub(self, rhs: Span) -> Self::Output {
let timestamp = self.timestamp - rhs.seconds as i64;
Self {timestamp}
}
}
impl Sub<Point> for Point {
type Output = Span;
fn sub(self, rhs: Point) -> Self::Output {
let seconds = self.timestamp.abs_diff(rhs.timestamp);
Span {seconds}
}
}