use std::collections::BTreeMap;
use crate::{
config::{ApiToken, ForgeType, Hostname, RepoAlias, ServerRepoConfig, User},
s,
};
use super::CommitCount;
#[derive(
Clone,
Debug,
derive_more::From,
PartialEq,
Eq,
PartialOrd,
Ord,
serde::Deserialize,
derive_more::Constructor,
derive_more::Display,
)]
#[display("{}:{}@{}", s!(forge_type).to_lowercase(), user, hostname)]
pub struct ForgeConfig {
forge_type: ForgeType,
hostname: String,
user: String,
token: String,
max_dev_commits: Option<u32>,
repos: BTreeMap<String, ServerRepoConfig>,
}
impl ForgeConfig {
pub(crate) const fn forge_type(&self) -> ForgeType {
self.forge_type
}
pub(crate) fn hostname(&self) -> Hostname {
Hostname::new(&self.hostname)
}
pub(crate) fn user(&self) -> User {
User::new(self.user.clone())
}
pub(crate) fn token(&self) -> ApiToken {
ApiToken::new(self.token.clone().into())
}
pub(crate) fn max_dev_commits(&self) -> Option<CommitCount> {
self.max_dev_commits.map(CommitCount::from)
}
pub fn repos(&self) -> impl Iterator<Item = (RepoAlias, &ServerRepoConfig)> {
self.repos
.iter()
.map(|(name, repo)| (RepoAlias::new(name), repo))
}
#[cfg(test)]
#[must_use]
pub fn get_repo(&self, arg: &str) -> Option<&ServerRepoConfig> {
self.repos.get(arg)
}
}