use std::collections::BTreeMap; use crate::{ApiToken, ForgeType, Hostname, RepoAlias, ServerRepoConfig, User}; /// Defines a Forge to connect to /// Maps from `git-next-server.toml` at `forge.{forge}` #[derive( Clone, Debug, PartialEq, Eq, serde::Deserialize, derive_more::Constructor, derive_more::Display, )] #[display("{}:{}@{}", forge_type.to_string().to_lowercase(), user, hostname)] pub struct ForgeConfig { forge_type: ForgeType, hostname: String, user: String, token: String, repos: BTreeMap, } impl ForgeConfig { pub const fn forge_type(&self) -> ForgeType { self.forge_type } pub fn hostname(&self) -> Hostname { Hostname::new(&self.hostname) } pub fn user(&self) -> User { User::new(self.user.clone()) } pub fn token(&self) -> ApiToken { ApiToken::new(self.token.clone().into()) } pub fn repos(&self) -> impl Iterator { self.repos .iter() .map(|(name, repo)| (RepoAlias::new(name), repo)) } pub fn get_repo(&self, arg: &str) -> Option<&ServerRepoConfig> { self.repos.get(arg) } }