git_next_core/config/
forge_config.rs1use std::collections::BTreeMap;
2
3use crate::{
4 config::{ApiToken, ForgeType, Hostname, RepoAlias, ServerRepoConfig, User},
5 s,
6};
7
8use super::CommitCount;
9
10#[derive(
13 Clone,
14 Debug,
15 derive_more::From,
16 PartialEq,
17 Eq,
18 PartialOrd,
19 Ord,
20 serde::Deserialize,
21 derive_more::Constructor,
22 derive_more::Display,
23)]
24#[display("{}:{}@{}", s!(forge_type).to_lowercase(), user, hostname)]
25pub struct ForgeConfig {
26 forge_type: ForgeType,
27 hostname: String,
28 user: String,
29 token: String,
30 max_dev_commits: Option<u32>,
31 repos: BTreeMap<String, ServerRepoConfig>,
32}
33impl ForgeConfig {
34 pub(crate) const fn forge_type(&self) -> ForgeType {
35 self.forge_type
36 }
37
38 pub(crate) fn hostname(&self) -> Hostname {
39 Hostname::new(&self.hostname)
40 }
41
42 pub(crate) fn user(&self) -> User {
43 User::new(self.user.clone())
44 }
45
46 pub(crate) fn token(&self) -> ApiToken {
47 ApiToken::new(self.token.clone().into())
48 }
49
50 pub(crate) fn max_dev_commits(&self) -> Option<CommitCount> {
51 self.max_dev_commits.map(CommitCount::from)
52 }
53
54 pub fn repos(&self) -> impl Iterator<Item = (RepoAlias, &ServerRepoConfig)> {
55 self.repos
56 .iter()
57 .map(|(name, repo)| (RepoAlias::new(name), repo))
58 }
59
60 #[cfg(test)]
61 #[must_use]
62 pub fn get_repo(&self, arg: &str) -> Option<&ServerRepoConfig> {
63 self.repos.get(arg)
64 }
65}