1extern crate log4rs;
12extern crate metrics as metrics_lib;
13
14pub extern crate yaml_rust as yaml;
15pub extern crate iron;
16pub extern crate router;
17
18pub extern crate serde;
19pub extern crate serde_bytes as bytes;
20pub extern crate serde_json as json;
21
22pub extern crate chrono;
23
24pub mod config;
26
27pub mod healthcheck;
29
30pub mod http;
32
33pub mod logging;
35
36pub mod metrics;
38
39use std::ops::Deref;
40use chrono::prelude::{TimeZone, Utc, DateTime};
41use serde::{Deserialize, Serialize, Deserializer, Serializer};
42
43#[derive(Debug, PartialOrd, PartialEq, Clone, Copy, Hash)]
46pub struct TimeStamp(i64);
47
48impl TimeStamp {
49
50 pub fn new(ts: i64) -> TimeStamp {
53 TimeStamp(ts)
54 }
55}
56
57impl Deref for TimeStamp {
58 type Target = i64;
59
60 fn deref(&self) -> &i64 {
61 let &TimeStamp(ref value) = self;
62 value
63 }
64}
65
66impl Serialize for TimeStamp {
67 fn serialize<S>(&self, serializer: S) -> std::result::Result<<S as Serializer>::Ok, <S as Serializer>::Error>
68 where S: Serializer
69 {
70 serializer.serialize_i64(**self)
71 }
72}
73
74impl From<DateTime<Utc>> for TimeStamp {
75 fn from(dt: DateTime<Utc>) -> Self {
76 TimeStamp(dt.timestamp())
77 }
78}
79
80impl Into<DateTime<Utc>> for TimeStamp {
81 fn into(self) -> DateTime<Utc> {
82 Utc.timestamp(*self, 0)
83 }
84}
85
86impl<'de> Deserialize<'de> for TimeStamp {
87 fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
88 where D: Deserializer<'de>
89 {
90 i64::deserialize(deserializer).map(TimeStamp::new)
91 }
92}