use crate::msg::bucket_api::{BucketInfo, BucketSettings};
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use std::fmt::{Display, Formatter};
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
pub struct License {
pub licensee: String,
pub invoice: String,
pub expiry_date: DateTime<Utc>,
pub plan: String,
pub device_number: u32,
pub disk_quota: i32,
#[serde(default)]
pub fingerprint: String,
}
impl Display for License {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(
f,
"\n\tLicensee: {}\n\tInvoice: {}\n\tExpiry Date: {}\n\tPlan: {}\n\tNumber of Devices: {}\n\tDisk Quota: {} TB,\n\tFingerprint: {}",
self.licensee, self.invoice, self.expiry_date, self.plan, self.device_number, self.disk_quota, self.fingerprint
)
}
}
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq)]
pub struct ServerInfo {
pub version: String,
#[serde(default)]
pub instance_name: String,
#[serde(default)]
pub instance_role: String,
pub bucket_count: u64,
pub usage: u64,
pub uptime: u64,
pub oldest_record: u64,
pub latest_record: u64,
pub defaults: Defaults,
pub license: Option<License>,
}
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq)]
pub struct Defaults {
pub bucket: BucketSettings,
}
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq)]
pub struct BucketInfoList {
pub buckets: Vec<BucketInfo>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn server_info_deserializes_without_instance_identity() {
let mut value = serde_json::to_value(ServerInfo {
instance_name: "edge-a".to_string(),
instance_role: "PRIMARY".to_string(),
..ServerInfo::default()
})
.unwrap();
let object = value.as_object_mut().unwrap();
object.remove("instance_name");
object.remove("instance_role");
let info: ServerInfo = serde_json::from_value(value).unwrap();
assert_eq!(info.instance_name, "");
assert_eq!(info.instance_role, "");
}
}