use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
use crate::{OpenTalkAccountConfig, OpenTalkAccountId};
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
pub struct OpenTalkInstanceConfig {
pub default_account: OpenTalkAccountId,
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
pub accounts: BTreeMap<OpenTalkAccountId, OpenTalkAccountConfig>,
}
impl OpenTalkInstanceConfig {
pub fn get_default_account(&self) -> Option<(OpenTalkAccountId, OpenTalkAccountConfig)> {
self.get_account(&self.default_account)
.map(|account| (self.default_account.clone(), account))
}
pub fn get_account(&self, account_id: &OpenTalkAccountId) -> Option<OpenTalkAccountConfig> {
self.accounts.get(account_id).cloned()
}
pub fn get_account_with_fallback_to_default(
&self,
account_id: Option<&OpenTalkAccountId>,
) -> Option<(OpenTalkAccountId, OpenTalkAccountConfig)> {
if let Some(account_id) = account_id {
let account = self.get_account(account_id)?;
Some((account_id.clone(), account))
} else {
self.get_default_account()
}
}
pub fn remove_account(&mut self, account_id: Option<&OpenTalkAccountId>) {
let account_id = account_id.unwrap_or(&self.default_account);
let _ = self.accounts.remove(account_id);
}
}