phos_data_network/config/
cli.rs1use 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#[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}