convd 2.6.12

A profile converter for surge/clash.
Documentation
use crate::server::service::{ClashService, SurgeService};
use convertor::config::ConvertorConfig;
use convertor::config::provider_config::Provider;
use convertor::provider_api::ProviderApi;
use redis::aio::ConnectionManager;
use std::collections::HashMap;
use std::sync::Arc;

#[derive(Clone)]
pub struct AppState {
    pub config: Arc<ConvertorConfig>,
    pub redis: Option<redis::Client>,
    pub redis_connection: Option<ConnectionManager>,
    pub api_map: HashMap<Provider, ProviderApi>,
    pub surge_service: SurgeService,
    pub clash_service: ClashService,
}

impl AppState {
    pub fn new(
        config: ConvertorConfig,
        redis: Option<redis::Client>,
        redis_connection: Option<ConnectionManager>,
    ) -> Self {
        let config = Arc::new(config);
        let surge_service = SurgeService::new(config.clone());
        let clash_service = ClashService::new(config.clone());
        let api_map = match redis_connection.clone() {
            None => ProviderApi::create_api_no_redis(config.providers.clone()),
            Some(redis_connection) => ProviderApi::create_api(config.providers.clone(), redis_connection),
        };
        Self {
            config,
            api_map,
            redis,
            redis_connection,
            surge_service,
            clash_service,
        }
    }
}