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 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>;