reduct_base/msg/
server_api.rs1use crate::msg::bucket_api::{BucketInfo, BucketSettings};
5use chrono::{DateTime, Utc};
6use serde::{Deserialize, Serialize};
7use std::fmt::{Display, Formatter};
8
9#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
12pub struct License {
13 pub licensee: String,
15 pub invoice: String,
17 pub expiry_date: DateTime<Utc>,
19 pub plan: String,
21 pub device_number: u32,
23 pub disk_quota: i32,
25 #[serde(default)]
27 pub fingerprint: String,
28}
29
30impl Display for License {
31 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
32 write!(
33 f,
34 "\n\tLicensee: {}\n\tInvoice: {}\n\tExpiry Date: {}\n\tPlan: {}\n\tNumber of Devices: {}\n\tDisk Quota: {} TB,\n\tFingerprint: {}",
35 self.licensee, self.invoice, self.expiry_date, self.plan, self.device_number, self.disk_quota, self.fingerprint
36 )
37 }
38}
39
40#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq)]
42pub struct ServerInfo {
43 pub version: String,
45 #[serde(default)]
47 pub instance_name: String,
48 #[serde(default)]
50 pub instance_role: String,
51 pub bucket_count: u64,
53 pub usage: u64,
55 pub uptime: u64,
57 pub oldest_record: u64,
59 pub latest_record: u64,
61 pub defaults: Defaults,
63 pub license: Option<License>,
65}
66
67#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq)]
69pub struct Defaults {
70 pub bucket: BucketSettings,
71}
72
73#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq)]
75pub struct BucketInfoList {
76 pub buckets: Vec<BucketInfo>,
77}
78
79#[cfg(test)]
80mod tests {
81 use super::*;
82
83 #[test]
84 fn server_info_deserializes_without_instance_identity() {
85 let mut value = serde_json::to_value(ServerInfo {
86 instance_name: "edge-a".to_string(),
87 instance_role: "PRIMARY".to_string(),
88 ..ServerInfo::default()
89 })
90 .unwrap();
91 let object = value.as_object_mut().unwrap();
92 object.remove("instance_name");
93 object.remove("instance_role");
94
95 let info: ServerInfo = serde_json::from_value(value).unwrap();
96 assert_eq!(info.instance_name, "");
97 assert_eq!(info.instance_role, "");
98 }
99}