use chrono::DateTime;
use chrono::Utc;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use serde_json::map::Map;
use serde_json::value::Value;
use std::collections::HashMap;
use crate::Event;
use crate::TryVec;
#[derive(Serialize, Deserialize, JsonSchema, Clone, Debug)]
pub struct Bucket {
#[serde(skip)]
pub bid: Option<i64>,
#[serde(default)]
pub id: String,
#[serde(rename = "type")] pub _type: String,
pub client: String,
pub hostname: String,
pub created: Option<DateTime<Utc>>,
#[serde(default)]
pub data: Map<String, Value>,
#[serde(default, skip_deserializing)]
pub metadata: BucketMetadata,
pub events: Option<TryVec<Event>>,
pub last_updated: Option<DateTime<Utc>>, }
#[derive(Serialize, Deserialize, JsonSchema, Clone, Debug)]
pub struct BucketMetadata {
#[serde(default)]
pub start: Option<DateTime<Utc>>,
pub end: Option<DateTime<Utc>>,
}
impl Default for BucketMetadata {
fn default() -> BucketMetadata {
BucketMetadata {
start: None,
end: None,
}
}
}
#[derive(Serialize, Deserialize, JsonSchema, Clone)]
pub struct BucketsExport {
pub buckets: HashMap<String, Bucket>,
}
#[test]
fn test_bucket() {
let b = Bucket {
bid: None,
id: "id".to_string(),
_type: "type".to_string(),
client: "client".to_string(),
hostname: "hostname".to_string(),
created: None,
data: json_map! {},
metadata: BucketMetadata::default(),
events: None,
last_updated: None,
};
debug!("bucket: {:?}", b);
}