Skip to main content

newton_prover_config/
lib.rs

1//! config
2use std::path::PathBuf;
3
4use crate::{
5    contracts::{get_deployment_env, ContractsConfig},
6    ipfs::IpfsConfig,
7    rpc::RpcProviderConfig,
8};
9/// Contracts Config
10pub mod contracts;
11/// Embedded deployment files
12pub mod deployments;
13/// Environment variables
14pub mod dotenv;
15/// Config Error
16pub mod error;
17/// IPFS Config
18pub mod ipfs;
19/// Key Config
20pub mod key;
21/// Config Loader Trait
22pub mod loader;
23pub use loader::ConfigLoader;
24use tracing::info;
25/// Log Config
26pub mod log;
27/// Macros
28pub mod macros;
29/// RPC Config
30pub 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}