webhook-gateway 2.17.2

A service to ingress github event
Documentation
use anyhow::{anyhow, Result};
use once_cell::sync::OnceCell;
use std::env;
use std::process;
#[derive(Debug)]
pub struct ConfigEnv {
    pub backend_host: Option<String>,
    pub backend_port: Option<String>,
    pub backend_api_token: Option<String>,
    pub github_token: String,
    pub kafka_broker_list: String,
    pub kafka_topic: String,
    pub time_spent_topic: String,
}

impl ConfigEnv {
    pub fn new() -> Result<ConfigEnv> {
        let github_token = env::var("GITHUB_TOKEN");
        if github_token.is_err() {
            return Err(anyhow!(
                "GITHUB_TOKEN is required, please provide it by env variable GITHUB_TOKEN"
            ));
        }

        let kafka_broker_list = env::var("KAFKA_BROKER_LIST");
        if kafka_broker_list.is_err() {
            return Err(anyhow!(
                "KAFKA_BROKER_LIST is required, please provide it by env variable KAFKA_BROKER_LIST like localhost:9092"
            ));
        }

        let kafka_topic = env::var("KAFKA_TOPIC");
        if kafka_topic.is_err() {
            return Err(anyhow!(
                "KAFKA_TOPIC is required, please provide it by env variable KAFKA_TOPIC"
            ));
        }
        let mut time_spent_topic = env::var("KAFKA_TP_TOPIC");
        if time_spent_topic.is_err() {
            time_spent_topic = Ok("time_spent".to_string());
        }
        Ok(ConfigEnv {
            backend_host: env::var("BACKEND_HOST").ok(),
            backend_port: env::var("BACKEND_PORT").ok(),
            backend_api_token: env::var("BACKEND_API_TOKEN").ok(),
            github_token: github_token.unwrap(),
            kafka_broker_list: kafka_broker_list.unwrap(),
            kafka_topic: kafka_topic.unwrap(),
            time_spent_topic: time_spent_topic.unwrap(),
        })
    }
}

pub static CONFIG: OnceCell<ConfigEnv> = OnceCell::new();

pub fn is_backend_api_enable() -> bool {
    let config = CONFIG.get().expect("fail to get env variable");
    config.backend_host.is_some() && config.backend_port.is_some() && config.backend_api_token.is_some()
}
pub fn get_backend_host() -> &'static str {
    CONFIG
        .get()
        .expect("fail to get env variable")
        .backend_host
        .as_ref()
        .unwrap()
}
pub fn get_backend_port() -> &'static str {
    CONFIG
        .get()
        .expect("fail to get env variable")
        .backend_port
        .as_ref()
        .unwrap()
}
pub fn get_backend_api_token() -> &'static str {
    CONFIG
        .get()
        .expect("fail to get env variable")
        .backend_api_token
        .as_ref()
        .unwrap()
}
pub fn get_github_token() -> &'static str {
    &CONFIG.get().expect("fail to get env variable").github_token
}

pub fn get_kafka_broker_list() -> &'static str {
    &CONFIG
        .get()
        .expect("fail to get env variable")
        .kafka_broker_list
}
pub fn get_kafka_time_spent_topic() -> &'static str {
    &CONFIG
        .get()
        .expect("fail to get env variable")
        .time_spent_topic
}

pub fn get_kafka_topic() -> &'static str {
    &CONFIG.get().expect("fail to get env variable").kafka_topic
}
pub fn ensure_config() {
    match ConfigEnv::new() {
        Ok(c) => {
            if let Err(e) = CONFIG.set(c) {
                eprintln!("reading env variable failed: {:?}", e);
            }
        }

        Err(e) => {
            eprintln!("{}", e);
            process::exit(1);
        }
    }
    if is_backend_api_enable() {
        println!("{}", get_backend_host());
        println!("{}", get_backend_port());
        println!("{}", get_backend_api_token());
    }

    println!("{}", get_kafka_broker_list());
    println!("{}", get_kafka_topic());
    println!("{}", get_kafka_time_spent_topic());
}