comtrya_lib/contexts/variable_include/
mod.rs1use std::collections::HashMap;
2
3use anyhow::Result;
4use reqwest::Url;
5
6use crate::{config::Config, contexts::Context, contexts::ContextProvider};
7
8pub mod dns;
9pub mod file;
10
11pub struct VariableIncludeContextProvider<'a> {
12 pub config: &'a Config,
13}
14
15impl<'a> ContextProvider for VariableIncludeContextProvider<'a> {
16 fn get_prefix(&self) -> String {
17 String::from("include_variables")
18 }
19
20 fn get_contexts(&self) -> Result<Vec<super::Context>> {
21 let mut contexts = HashMap::<String, String>::new();
22
23 if let Some(variable_includes) = &self.config.include_variables {
24 for variable_include in variable_includes {
25 let url = Url::parse(variable_include)?;
26
27 if url.scheme() == "dns+txt" {
28 dns::txt_record_values(&url, &mut contexts)?;
29 } else if url.scheme() == "file+toml" {
30 file::toml_values(&url, &mut contexts)?;
31 } else if url.scheme() == "file+yaml" {
32 file::yaml_values(&url, &mut contexts)?;
33 } else {
34 return Err(anyhow::anyhow!(
35 "Unknown variable include scheme: {}",
36 url.scheme()
37 ));
38 }
39 }
40 }
41
42 let contexts = contexts
43 .into_iter()
44 .map(|(key, value)| Context::KeyValueContext(key, value.into()))
45 .collect::<Vec<_>>();
46
47 Ok(contexts)
48 }
49}