hdp-core 0.2.5

HDP core implementation
Documentation
use std::env;
use tokio::sync::OnceCell;

pub static CONFIG: OnceCell<Config> = OnceCell::const_new();

pub struct Config {
    pub chain_id: u64,
    pub rpc_url: String,
    pub rpc_chunk_size: u64,
    pub datalakes: String,
    pub tasks: String,
}

impl Config {
    pub async fn init(
        cli_rpc_url: Option<String>,
        cli_datalakes: Option<String>,
        cli_tasks: Option<String>,
        cli_chain_id: Option<u64>,
    ) -> &'static Self {
        let chain_id =
            cli_chain_id.unwrap_or_else(|| env::var("CHAIN_ID").unwrap().parse().unwrap());
        let rpc_url = cli_rpc_url.unwrap_or_else(|| env::var("RPC_URL").unwrap());
        let rpc_chunk_size = env::var("RPC_CHUNK_SIZE")
            .unwrap_or_else(|_| "40".to_string())
            .parse()
            .unwrap();
        let datalakes = cli_datalakes.unwrap_or_else(|| env::var("DATALAKES").unwrap());
        let tasks = cli_tasks.unwrap_or_else(|| env::var("TASKS").unwrap());

        CONFIG
            .get_or_init(|| async {
                Config {
                    chain_id,
                    rpc_url,
                    rpc_chunk_size,
                    datalakes,
                    tasks,
                }
            })
            .await
    }
}