aw_models/
bucket.rs

1use chrono::DateTime;
2use chrono::Utc;
3use schemars::JsonSchema;
4use serde::{Deserialize, Serialize};
5use serde_json::map::Map;
6use serde_json::value::Value;
7use std::collections::HashMap;
8
9use crate::Event;
10
11#[derive(Serialize, Deserialize, JsonSchema, Clone, Debug)]
12pub struct Bucket {
13    #[serde(skip)]
14    pub bid: Option<i64>,
15    #[serde(default)]
16    pub id: String,
17    #[serde(rename = "type")] /* type is a reserved Rust keyword */ pub _type: String,
18    pub client: String,
19    pub hostname: String,
20    pub created: Option<DateTime<Utc>>,
21    #[serde(default)]
22    pub data: Map<String, Value>,
23    #[serde(default, skip_deserializing)]
24    pub metadata: BucketMetadata,
25    pub events: Option<Vec<Event>>, /* Should only be set during import/export */
26    pub last_updated: Option<DateTime<Utc>>, // TODO: Should probably be moved into metadata field
27}
28
29#[derive(Serialize, Deserialize, JsonSchema, Clone, Debug)]
30pub struct BucketMetadata {
31    #[serde(default)]
32    pub start: Option<DateTime<Utc>>,
33    pub end: Option<DateTime<Utc>>,
34}
35
36impl Default for BucketMetadata {
37    fn default() -> BucketMetadata {
38        BucketMetadata {
39            start: None,
40            end: None,
41        }
42    }
43}
44
45#[derive(Serialize, Deserialize, JsonSchema, Clone)]
46pub struct BucketsExport {
47    pub buckets: HashMap<String, Bucket>,
48}
49
50#[test]
51fn test_bucket() {
52    let b = Bucket {
53        bid: None,
54        id: "id".to_string(),
55        _type: "type".to_string(),
56        client: "client".to_string(),
57        hostname: "hostname".to_string(),
58        created: None,
59        data: json_map! {},
60        metadata: BucketMetadata::default(),
61        events: None,
62        last_updated: None,
63    };
64    debug!("bucket: {:?}", b);
65}