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::Display)] #[display("{}:{}@{}", forge_type.to_string().to_lowercase(), user, hostname)] pub struct ForgeConfig { pub forge_type: ForgeType, pub hostname: String, pub user: String, pub token: String, pub 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(self.user.clone()) } pub fn token(&self) -> ApiToken { ApiToken(self.token.clone().into()) } pub fn repos(&self) -> impl Iterator { self.repos .iter() .map(|(name, repo)| (RepoAlias::new(name), repo)) } }