ephemeris_forge_github/config/
autolinks.rs1use std::collections::BTreeMap;
2
3use ephemeris_forge::{Mode, non_empty_name};
4use facet::Facet;
5
6use super::ConfigError;
7
8const NUMBER_PLACEHOLDER: &str = "<num>";
9
10non_empty_name! {
11 pub struct KeyPrefix;
13 pub error EmptyKeyPrefix("autolink key prefix cannot be empty");
15}
16
17#[derive(Clone, Debug, Eq, Facet, PartialEq)]
19#[facet(deny_unknown_fields)]
20pub struct Autolink {
21 pub url_template: String,
23 pub is_alphanumeric: bool,
25}
26
27#[derive(Clone, Debug, Eq, Facet, PartialEq)]
29#[facet(deny_unknown_fields)]
30pub struct Autolinks {
31 pub mode: Mode,
33 pub autolinks: BTreeMap<KeyPrefix, Autolink>,
35}
36
37impl Autolinks {
38 pub fn validate(&self) -> Result<(), ConfigError> {
43 for (key_prefix, autolink) in &self.autolinks {
44 if !autolink.url_template.contains(NUMBER_PLACEHOLDER) {
45 return Err(ConfigError::AutolinkTemplateWithoutNumber {
46 key_prefix: key_prefix.clone(),
47 });
48 }
49 }
50 Ok(())
51 }
52}