snapshot/
snapshot.rs

1use env_watcher::{EnvironmentWatcher, Error, Subscribe};
2use std::thread::sleep;
3use std::time::Duration;
4
5static TEST_VALUE: &'static str = "ONLY_TEST";
6static TEST_BY_CHANGE_VALUE: &'static str = "ONLY_TEST_CHANGE";
7
8fn fill_envs(envs: Vec<String>, val: &'static str) {
9    envs.iter().for_each(|k| {
10        std::env::set_var(k, &val);
11    });
12}
13
14fn print_after() {
15    println!();
16    println!("###################################################");
17    println!("############## SUB KEYS AFTER CHANGE ##############");
18    println!("###################################################");
19    println!();
20}
21
22fn print_before() {
23    println!();
24    println!("####################################################");
25    println!("############## SUB KEYS BEFORE CHANGE ##############");
26    println!("####################################################");
27    println!();
28}
29
30pub fn main() -> Result<(), Error> {
31    let sub_envs_key = vec!["test.bey".to_string(), "test.wow".to_string()];
32    fill_envs(sub_envs_key.clone(), TEST_VALUE);
33
34    let sub_envs = Subscribe::Envs(sub_envs_key.clone());
35
36    let sub_pattern_envs_key = vec![
37        "my.server.port".to_string(),
38        "my.server.host".to_string(),
39        "my.server.locale".to_string(),
40        "my.server.tls".to_string(),
41    ];
42    fill_envs(sub_pattern_envs_key.clone(), TEST_VALUE);
43
44    let sub_pattern_envs = Subscribe::PatternEnvs(vec!["^my.server.*".to_string()]);
45
46    let env_core = EnvironmentWatcher::new(Duration::from_secs(3));
47    sleep(Duration::from_secs(1));
48
49    let only_envs = env_core.subscribe_snapshot(sub_envs)?;
50
51    let envs_data = only_envs.data();
52    print_after();
53    println!("{:?}", &envs_data);
54    println!();
55
56    envs_data.iter().for_each(|kv| {
57        match &**kv.0 {
58            "test.bey" | "test.wow" => {
59                // All good.
60                assert_eq!(TEST_VALUE, &**kv.1);
61            }
62            _ => {
63                println!("Find unknown key with value. {}, {}", &**kv.0, &**kv.1);
64                panic!("unknown k/v in pattern sub.");
65            }
66        }
67    });
68
69    let pattern_envs = env_core.subscribe_snapshot(sub_pattern_envs)?;
70
71    let pattern_data = pattern_envs.data();
72    println!("{:?}", &pattern_data);
73
74    pattern_data.iter().for_each(|kv| {
75        match &**kv.0 {
76            "my.server.port" | "my.server.host" | "my.server.locale" | "my.server.tls" => {
77                // All good.
78                assert_eq!(TEST_VALUE, &**kv.1);
79            }
80            _ => {
81                println!("Find unknown key with value. {}, {}", &**kv.0, &**kv.1);
82                panic!("unknown k/v in pattern sub.");
83            }
84        }
85    });
86
87    fill_envs(sub_envs_key.clone(), TEST_BY_CHANGE_VALUE);
88    fill_envs(sub_pattern_envs_key.clone(), TEST_BY_CHANGE_VALUE);
89
90    sleep(Duration::from_secs(3));
91
92    print_before();
93    let envs_data = only_envs.data();
94    println!("{:?}", &envs_data);
95    println!();
96
97    envs_data.iter().for_each(|kv| {
98        match &**kv.0 {
99            "test.bey" | "test.wow" => {
100                // All good.
101                assert_eq!(TEST_BY_CHANGE_VALUE, &**kv.1);
102            }
103            _ => {
104                println!("Find unknown key with value. {}, {}", &**kv.0, &**kv.1);
105                panic!("unknown k/v in pattern sub.");
106            }
107        }
108    });
109
110    let pattern_data = pattern_envs.data();
111    println!("{:?}", &pattern_data);
112
113    pattern_data.iter().for_each(|kv| {
114        match &**kv.0 {
115            "my.server.port" | "my.server.host" | "my.server.locale" | "my.server.tls" => {
116                // All good.
117                assert_eq!(TEST_BY_CHANGE_VALUE, &**kv.1);
118            }
119            _ => {
120                println!("Find unknown key with value. {}, {}", &**kv.0, &**kv.1);
121                panic!("unknown k/v in pattern sub.");
122            }
123        }
124    });
125
126    Ok(())
127}