use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use super::{Extra, Timestamp, Units, de, time};
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct V3Version {
#[serde(default, with = "de::text")]
pub version: Option<String>,
#[serde(rename = "apiVersion", default, with = "de::text")]
pub api_version: Option<String>,
#[serde(rename = "srvDate", default, with = "time::millis")]
pub srv_date: Option<Timestamp>,
#[serde(default, deserialize_with = "de::tolerant")]
pub storage: Option<StorageInfo>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct StorageInfo {
#[serde(default, alias = "type", with = "de::text")]
pub storage: Option<String>,
#[serde(default, with = "de::text")]
pub version: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct V3Status {
#[serde(flatten)]
pub version: V3Version,
#[serde(rename = "apiPermissions", default)]
pub api_permissions: BTreeMap<String, String>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct LastModified {
#[serde(rename = "srvDate", default, with = "time::millis")]
pub srv_date: Option<Timestamp>,
#[serde(default)]
pub collections: BTreeMap<String, Timestamp>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct ApiVersionInfo {
pub version: String,
pub url: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct Status {
#[serde(default, with = "de::text")]
pub status: Option<String>,
#[serde(default, with = "de::text")]
pub name: Option<String>,
#[serde(default, with = "de::text")]
pub version: Option<String>,
#[serde(rename = "serverTime", default, with = "time::iso")]
pub server_time: Option<Timestamp>,
#[serde(rename = "serverTimeEpoch", default, with = "time::millis")]
pub server_time_epoch: Option<Timestamp>,
#[serde(rename = "apiEnabled", default, with = "de::flag")]
pub api_enabled: Option<bool>,
#[serde(rename = "careportalEnabled", default, with = "de::flag")]
pub careportal_enabled: Option<bool>,
#[serde(rename = "boluscalcEnabled", default, with = "de::flag")]
pub boluscalc_enabled: Option<bool>,
#[serde(default, deserialize_with = "de::tolerant")]
pub settings: Option<Settings>,
#[serde(rename = "extendedSettings", default)]
pub extended_settings: Option<Value>,
#[serde(default)]
pub authorized: Option<Value>,
#[serde(rename = "runtimeState", default, with = "de::text")]
pub runtime_state: Option<String>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct Settings {
#[serde(default, with = "de::text")]
pub units: Option<String>,
#[serde(rename = "timeFormat", default, with = "de::int")]
pub time_format: Option<i64>,
#[serde(rename = "customTitle", default, with = "de::text")]
pub custom_title: Option<String>,
#[serde(default, with = "de::text")]
pub theme: Option<String>,
#[serde(default, with = "de::text")]
pub language: Option<String>,
#[serde(rename = "nightMode", default, with = "de::flag")]
pub night_mode: Option<bool>,
#[serde(rename = "authDefaultRoles", default, with = "de::text")]
pub auth_default_roles: Option<String>,
#[serde(default, deserialize_with = "de::null_as_empty")]
pub enable: Vec<String>,
#[serde(rename = "showPlugins", default, with = "de::text")]
pub show_plugins: Option<String>,
#[serde(rename = "alarmTypes", default, deserialize_with = "de::null_as_empty")]
pub alarm_types: Vec<String>,
#[serde(rename = "alarmUrgentHigh", default, with = "de::flag")]
pub alarm_urgent_high: Option<bool>,
#[serde(rename = "alarmHigh", default, with = "de::flag")]
pub alarm_high: Option<bool>,
#[serde(rename = "alarmLow", default, with = "de::flag")]
pub alarm_low: Option<bool>,
#[serde(rename = "alarmUrgentLow", default, with = "de::flag")]
pub alarm_urgent_low: Option<bool>,
#[serde(rename = "alarmTimeagoWarn", default, with = "de::flag")]
pub alarm_timeago_warn: Option<bool>,
#[serde(rename = "alarmTimeagoWarnMins", default, with = "de::int")]
pub alarm_timeago_warn_mins: Option<i64>,
#[serde(rename = "alarmTimeagoUrgent", default, with = "de::flag")]
pub alarm_timeago_urgent: Option<bool>,
#[serde(rename = "alarmTimeagoUrgentMins", default, with = "de::int")]
pub alarm_timeago_urgent_mins: Option<i64>,
#[serde(default, deserialize_with = "de::tolerant")]
pub thresholds: Option<Thresholds>,
#[serde(rename = "focusHours", default, with = "de::int")]
pub focus_hours: Option<i64>,
#[serde(default, with = "de::int")]
pub heartbeat: Option<i64>,
#[serde(rename = "baseURL", default, with = "de::text")]
pub base_url: Option<String>,
#[serde(rename = "authFailDelay", default, with = "de::int")]
pub auth_fail_delay: Option<i64>,
#[serde(flatten)]
pub extra: Extra,
}
impl Settings {
#[must_use]
pub fn display_units(&self) -> Option<Units> {
self.units.as_deref().and_then(Units::parse)
}
#[must_use]
pub fn is_enabled(&self, feature: &str) -> bool {
self.enable.iter().any(|f| f == feature)
}
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct Thresholds {
#[serde(rename = "bgHigh", default, with = "de::num")]
pub bg_high: Option<f64>,
#[serde(rename = "bgTargetTop", default, with = "de::num")]
pub bg_target_top: Option<f64>,
#[serde(rename = "bgTargetBottom", default, with = "de::num")]
pub bg_target_bottom: Option<f64>,
#[serde(rename = "bgLow", default, with = "de::num")]
pub bg_low: Option<f64>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct VerifyAuth {
#[serde(rename = "canRead", default)]
pub can_read: bool,
#[serde(rename = "canWrite", default)]
pub can_write: bool,
#[serde(rename = "isAdmin", default)]
pub is_admin: bool,
#[serde(default)]
pub message: String,
#[serde(default)]
pub rolefound: String,
#[serde(default)]
pub permissions: String,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct AdminNotifies {
#[serde(default, deserialize_with = "de::null_as_empty")]
pub notifies: Vec<AdminNotify>,
#[serde(rename = "notifyCount", default)]
pub notify_count: u64,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct AdminNotify {
#[serde(default, with = "de::text")]
pub title: Option<String>,
#[serde(default, with = "de::text")]
pub message: Option<String>,
#[serde(default, with = "de::int")]
pub count: Option<i64>,
#[serde(rename = "lastRecorded", default, with = "time::millis")]
pub last_recorded: Option<Timestamp>,
#[serde(flatten)]
pub extra: Extra,
}