51 lines
1.3 KiB
Rust
51 lines
1.3 KiB
Rust
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<String, ServerRepoConfig>,
|
|
}
|
|
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<Item = (RepoAlias, &ServerRepoConfig)> {
|
|
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
|
|
)
|
|
}
|
|
}
|