use std::collections::HashMap; use serde::Deserialize; 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, Deserialize)] pub struct ForgeConfig { pub forge_type: ForgeType, pub hostname: String, pub user: String, pub token: String, pub repos: HashMap, } impl ForgeConfig { #[allow(dead_code)] pub const fn forge_type(&self) -> &ForgeType { &self.forge_type } pub fn hostname(&self) -> Hostname { Hostname(self.hostname.clone()) } 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(name.clone()), repo)) } } impl std::fmt::Display for ForgeConfig { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!( f, "{}:{}@{}", self.forge_type.to_string().to_lowercase(), self.user, self.hostname ) } }