use apollo_configuration::configuration;
use apollo_configuration::parse_yaml;
use apollo_configuration::types::Regex;
use serde::{Deserialize, Serialize};
#[configuration]
struct RegexConfig {
#[config(required)]
pattern: Regex,
}
#[test]
fn regex_parses() {
let config: RegexConfig = parse_yaml(r#"pattern: "^[a-z]+$""#, &Default::default()).unwrap();
assert!(config.pattern.is_match("hello"));
assert!(!config.pattern.is_match("Hello123"));
}
#[test]
fn regex_error_message() {
let result = parse_yaml::<RegexConfig>(r#"pattern: "[badpattern""#, &Default::default());
let err = result.expect_err("should reject invalid regex");
assert_eq!(
format!("{err}"),
"failed to parse value: regex parse error:\n [badpattern\n ^\nerror: unclosed character class"
);
}
#[derive(Debug, Deserialize, Serialize)]
struct SerializableRegexConfig {
pattern: Regex,
}
#[test]
fn regex_serializes() {
let config: SerializableRegexConfig = serde_yaml::from_str(r#"pattern: "^[a-z]+$""#).unwrap();
let yaml = serde_yaml::to_string(&config).unwrap();
insta::assert_snapshot!(yaml, @"pattern: ^[a-z]+$");
}