Skip to main content

phos_data_network/config/
cli.rs

1use std::net::IpAddr;
2use std::{collections::HashMap, path::PathBuf};
3
4use figment::{providers::Serialized, value::Value};
5use serde::{Deserialize, Serialize};
6use url::Url;
7
8use crate::config::types::TrustOptions;
9
10/// CLI configuration overrides.
11#[derive(Serialize, Deserialize, Debug, Clone, Default)]
12pub struct CliConfig {
13    pub execution_rpc: Option<Url>,
14    pub verifiable_api: Option<Url>,
15    pub consensus_rpc: Option<Url>,
16    pub trust_options: Option<TrustOptions>,
17    pub rpc_bind_ip: Option<IpAddr>,
18    pub rpc_port: Option<u16>,
19    pub data_dir: Option<PathBuf>,
20}
21
22impl CliConfig {
23    pub fn as_provider(&self, network: &str) -> Serialized<HashMap<&str, Value>> {
24        let mut user_dict = HashMap::new();
25
26        if let Some(rpc) = &self.execution_rpc {
27            user_dict.insert("execution_rpc", Value::from(rpc.to_string()));
28        }
29
30        if let Some(api) = &self.verifiable_api {
31            user_dict.insert("verifiable_api", Value::from(api.to_string()));
32        }
33
34        if let Some(rpc) = &self.consensus_rpc {
35            user_dict.insert("consensus_rpc", Value::from(rpc.to_string()));
36        }
37
38        if let Some(trust_options) = &self.trust_options {
39            user_dict.insert(
40                "trust_options",
41                Value::serialize(trust_options).expect("trust options should serialize"),
42            );
43        }
44
45        if let Some(ip) = self.rpc_bind_ip {
46            user_dict.insert("rpc_bind_ip", Value::from(ip.to_string()));
47        }
48
49        if let Some(port) = self.rpc_port {
50            user_dict.insert("rpc_port", Value::from(port));
51        }
52
53        if let Some(data_dir) = self.data_dir.as_ref() {
54            user_dict.insert("data_dir", Value::from(data_dir.to_str().unwrap()));
55        }
56
57        Serialized::from(user_dict, network)
58    }
59}