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")] 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>>, pub last_updated: Option<DateTime<Utc>>, }
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}