#![warn(missing_docs)]
use std::{collections::HashMap, sync::Arc};
use account::AccountConfig;
use instance::InstanceConfig;
use nitro_shared::id::{InstanceID, TemplateID};
use preferences::PrefDeser;
#[cfg(feature = "schema")]
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use template::TemplateConfig;
pub mod account;
pub mod instance;
pub mod package;
pub mod preferences;
pub mod template;
#[derive(Deserialize, Serialize, Default, Clone)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(default)]
pub struct ConfigDeser {
#[serde(alias = "users")]
pub accounts: HashMap<String, AccountConfig>,
#[serde(alias = "default_user")]
pub default_account: Option<String>,
pub instances: HashMap<InstanceID, InstanceConfig>,
pub instance_groups: HashMap<Arc<str>, Vec<InstanceID>>,
#[serde(alias = "profiles")]
pub templates: HashMap<TemplateID, TemplateConfig>,
#[serde(alias = "global_profile")]
pub base_template: Option<TemplateConfig>,
pub preferences: PrefDeser,
}
#[derive(Serialize, Deserialize, Clone, Copy, PartialEq, Eq, Default)]
#[serde(rename_all = "snake_case")]
pub enum ConfigKind {
#[default]
Instance,
Template,
BaseTemplate,
}