use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize)]
pub struct Config {
pub users: BTreeMap<String, UserConfig>,
pub groups: BTreeMap<String, GroupConfig>,
pub buildings: BTreeMap<String, BuildingConfig>,
pub resources: BTreeMap<String, ResourceConfig>,
pub links: BTreeMap<String, LinkConfig>,
pub labels: Vec<LabelConfig>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct UserConfig {
pub first_name: String,
pub last_name: String,
pub username: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub aliases: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub recovery_email: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub recovery_phone: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gender: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub chat: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub github: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub twitter: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub groups: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_super_admin: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub building: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct GroupConfig {
pub name: String,
pub description: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub aliases: Option<Vec<String>>,
pub allow_external_members: bool,
pub allow_web_posting: bool,
pub is_archived: bool,
pub who_can_discover_group: String,
pub who_can_join: String,
pub who_can_moderate_members: String,
pub who_can_post_message: String,
pub who_can_view_group: String,
pub who_can_view_membership: String,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct BuildingConfig {
pub name: String,
pub description: String,
pub address: String,
pub city: String,
pub state: String,
pub zipcode: String,
pub country: String,
pub floors: Vec<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct ResourceConfig {
pub name: String,
pub description: String,
#[serde(rename = "type")]
pub typev: String,
pub building: String,
pub capacity: i32,
pub floor: String,
pub section: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_zoom_room: Option<bool>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct LinkConfig {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
pub description: String,
pub link: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub aliases: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub subdomain: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub discussion: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct LabelConfig {
pub name: String,
pub description: String,
pub color: String,
}