1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#[macro_export]
macro_rules! from_compiled {  
    ($file:expr) => {         
        ConfigurationDefinitionParams::Source(ConfigurationSource::StringContent(String::from(include_str!(concat!(env!("OUT_DIR"), "/", $file)))))
    }
}

#[macro_export]
macro_rules! from_str {  
    ($json:expr) => {         
        ConfigurationDefinitionParams::Source(ConfigurationSource::StringContent(String::from($json)))
    }
}

#[macro_export]
macro_rules! from_json {  
    ($($json:tt)+) => {         
        ConfigurationDefinitionParams::Source(ConfigurationSource::JsonContent(json!($($json)+)))
    }
}

#[macro_export]
macro_rules! from_file {  
    ($file_path:expr) => {                 
        ConfigurationDefinitionParams::Source(ConfigurationSource::FileContent(String::from($file_path)))
    }
}

#[macro_export]
macro_rules! bundle {  
    ($bundle_key:expr, $bundle_sources:expr) => {{       
        let mut config_sources = Vec::new();

        for bundle in $bundle_sources{
            match bundle {
                ConfigurationDefinitionParams::Source(config_source) => config_sources.push(config_source),
                ConfigurationDefinitionParams::Bundle(_,_) => panic!("Nested bundle! declarations are not supported."),
            }
        }
        
        ConfigurationDefinitionParams::Bundle(String::from($bundle_key), config_sources)
    }}
}

#[macro_export]
macro_rules! config {  
    ($definition:expr) => {
        ConfigurationBuilder::from_definition($definition);
    }
}