ephemeris_forge_forgejo/
config.rs1mod access;
4mod actions_variables;
5mod branch_rules;
6mod deploy_keys;
7mod labels;
8mod push_access;
9mod repository;
10mod tag_protection;
11mod webhooks;
12
13use facet::Facet;
14
15pub(crate) use self::access::Access;
16pub use self::actions_variables::ActionsVariables;
17pub use self::branch_rules::{BranchRule, BranchRules, InvalidRuleName, RuleName};
18pub use self::deploy_keys::{DeployKey, DeployKeys};
19pub use self::labels::Label;
20pub(crate) use self::labels::Labels;
21pub use self::push_access::PushAccess;
22pub use self::repository::{
23 ExternalTracker, ExternalWiki, InternalTracker, InvalidTopic, MergeStyle, Repository,
24 TopicName, TrackerStyle, UpdateStyle,
25};
26pub use self::tag_protection::{TagProtection, TagRule};
27pub use self::webhooks::{HookType, Webhook, Webhooks};
28
29#[derive(Clone, Debug, Eq, Facet, PartialEq)]
31#[facet(deny_unknown_fields)]
32pub struct Config {
33 pub repository: Repository,
35 pub branch_rules: Option<BranchRules>,
37 pub access: Option<Access>,
39 pub labels: Option<Labels>,
41 pub tag_protection: Option<TagProtection>,
43 pub webhooks: Option<Webhooks>,
45 pub deploy_keys: Option<DeployKeys>,
47 pub actions_variables: Option<ActionsVariables>,
49}
50
51#[cfg(test)]
52mod tests {
53 use super::Config;
54
55 #[test]
56 fn contract_example_decodes() {
57 let config: Config = facet_json::from_str(include_str!("../tests/data/settings.json"))
58 .expect("valid configuration");
59 assert_eq!(config.branch_rules.expect("managed").rules.len(), 1);
60 }
61
62 #[test]
63 fn an_unknown_merge_style_is_rejected() {
64 let input = include_str!("../tests/data/settings.json").replace(
65 "\"default_merge_style\": \"rebase\"",
66 "\"default_merge_style\": \"manual\"",
67 );
68 facet_json::from_str::<Config>(&input).expect_err("closed enum");
69 }
70}