hit_data/
object_data.rs

1use chrono::DateTime;
2use chrono::NaiveDateTime;
3use chrono::Utc;
4use linked_hash_map::LinkedHashMap;
5use serde::{Deserialize, Serialize};
6
7use std::fmt::{Display, Formatter, Result as FmtResult};
8
9pub type Id = String;
10
11#[derive(Deserialize, Serialize, Clone, Debug, PartialEq)]
12pub struct Reference {
13    pub id: Id,
14}
15
16#[derive(Clone, Serialize, Deserialize, Debug, PartialEq)]
17pub struct DateTimeUtc {
18    datetime: i64,
19}
20
21#[derive(Clone, Serialize, Deserialize, Debug, PartialEq)]
22pub enum ObjectValue {
23    Bool(bool),
24    String(String),
25    // TODO : do we handle that ?
26    VecString(Vec<String>),
27    F32(f32),
28    I32(i32),
29    Date(DateTimeUtc),
30    Reference(Reference),
31    VecReference(Vec<Reference>),
32    SubObject(Reference),
33    VecSubObjects(Vec<Reference>),
34    Null,
35}
36
37impl DateTimeUtc {
38    pub fn new(datetime: DateTime<Utc>) -> DateTimeUtc {
39        return DateTimeUtc {
40            datetime: datetime.timestamp(),
41        };
42    }
43    pub fn get_date(&self) -> DateTime<Utc> {
44        return DateTime::<Utc>::from_utc(NaiveDateTime::from_timestamp(self.datetime, 0), Utc);
45    }
46
47    pub fn get_date_as_string(&self) -> String {
48        return self.get_date().to_rfc2822();
49    }
50}
51
52impl Display for DateTimeUtc {
53    fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult {
54        write!(f, "{}", self.datetime)?;
55        return Ok(());
56    }
57}
58
59pub type ObjectValues = LinkedHashMap<String, ObjectValue>;