lithium_cli/
deployments.rs1use std::sync::OnceLock;
4
5const MAINNET_TOML: &str = include_str!("../deployments/bostrom-mainnet.toml");
6
7#[derive(Debug, Clone)]
9pub struct Deployments {
10 pub litium_core: String,
11 pub litium_mine: String,
12 pub litium_stake: String,
13 pub litium_refer: String,
14 pub litium_wrap: String,
15}
16
17pub fn mainnet() -> &'static Deployments {
19 static DEPLOYMENTS: OnceLock<Deployments> = OnceLock::new();
20 DEPLOYMENTS.get_or_init(|| {
21 let table: toml::Table =
22 toml::from_str(MAINNET_TOML).expect("embedded deployments TOML is valid");
23
24 let addr = |section: &str| -> String {
25 table[section]["address"]
26 .as_str()
27 .unwrap_or_else(|| panic!("{} address missing in deployments TOML", section))
28 .to_string()
29 };
30
31 Deployments {
32 litium_core: addr("litium-core"),
33 litium_mine: addr("litium-mine"),
34 litium_stake: addr("litium-stake"),
35 litium_refer: addr("litium-refer"),
36 litium_wrap: addr("litium-wrap"),
37 }
38 })
39}
40
41#[cfg(test)]
42mod tests {
43 use super::*;
44
45 #[test]
46 fn mainnet_deployments_parse_successfully() {
47 let d = mainnet();
48 assert!(d.litium_core.starts_with("bostrom1"), "bad litium-core addr");
49 assert!(d.litium_mine.starts_with("bostrom1"), "bad litium-mine addr");
50 assert!(
51 d.litium_stake.starts_with("bostrom1"),
52 "bad litium-stake addr"
53 );
54 assert!(
55 d.litium_refer.starts_with("bostrom1"),
56 "bad litium-refer addr"
57 );
58 assert!(
59 d.litium_wrap.starts_with("bostrom1"),
60 "bad litium-wrap addr"
61 );
62 }
63}