newton_prover_config/
lib.rs1use std::path::PathBuf;
3
4use crate::{
5 contracts::{get_deployment_env, ContractsConfig},
6 ipfs::IpfsConfig,
7 rpc::RpcProviderConfig,
8};
9pub mod contracts;
11pub mod deployments;
13pub mod dotenv;
15pub mod error;
17pub mod ipfs;
19pub mod key;
21pub mod loader;
23pub use loader::ConfigLoader;
24use tracing::info;
25pub mod log;
27pub mod macros;
29pub mod rpc;
31
32#[derive(Debug, Clone)]
33pub struct NewtonAvsConfig<T: PartialEq + Eq + Clone + ConfigLoader> {
34 pub env: String,
35 pub chain_id: u64,
36 pub rpc: RpcProviderConfig,
37 pub ipfs: IpfsConfig,
38 pub contracts: ContractsConfig,
39 pub service: T,
40}
41
42#[derive(Debug)]
43pub struct NewtonAvsConfigBuilder {
44 chain_id: u64,
45 service_config_path: Option<PathBuf>,
46}
47
48impl NewtonAvsConfigBuilder {
49 pub fn new(chain_id: u64) -> Self {
50 Self {
51 service_config_path: None,
52 chain_id,
53 }
54 }
55
56 pub fn with_service_path(mut self, path: PathBuf) -> Self {
57 self.service_config_path = Some(path);
58 self
59 }
60
61 pub fn build<T: PartialEq + Eq + Clone + ConfigLoader>(self) -> Result<NewtonAvsConfig<T>, std::io::Error> {
62 let service = T::load_config(self.service_config_path)
63 .map_err(|e| std::io::Error::other(format!("Failed to load service config: {}", e)))?;
64 let config = NewtonAvsConfig::load(self.chain_id, service)
65 .map_err(|e| std::io::Error::other(format!("Failed to load NewtonAvsConfig: {}", e)))?;
66 Ok(config)
67 }
68}
69
70impl<T: PartialEq + Eq + Clone + ConfigLoader> NewtonAvsConfig<T> {
71 fn load(chain_id: u64, service: T) -> Result<Self, std::io::Error> {
72 info!("Loading config for chain_id: {}", chain_id);
73 crate::dotenv::init().ok();
74
75 let env = get_deployment_env();
76 let rpc = RpcProviderConfig::load(chain_id)?;
77
78 Ok(Self {
79 chain_id,
80 env: env.clone(),
81 rpc,
82 ipfs: IpfsConfig::default(),
83 contracts: ContractsConfig::load(chain_id, env)?,
84 service,
85 })
86 }
87}