mocra 0.3.0

A distributed, event-driven crawling and data collection framework
use crate::common::state::State;
use crate::engine::api::profile_store::ProfileControlPlaneStore;
use crate::engine::task::task_manager::TaskManager;
use crate::queue::QueueManager;
use metrics_exporter_prometheus::PrometheusHandle;
use std::sync::Arc;

#[derive(Clone)]
pub struct ApiState {
    pub(crate) queue_manager: Arc<QueueManager>,
    pub(crate) prometheus_handle: Option<PrometheusHandle>,
    pub(crate) state: Arc<State>,
    pub(crate) task_manager: Arc<TaskManager>,
    pub(crate) profile_store: Arc<ProfileControlPlaneStore>,
}

impl ApiState {
    pub fn new(
        queue_manager: Arc<QueueManager>,
        prometheus_handle: Option<PrometheusHandle>,
        state: Arc<State>,
        task_manager: Arc<TaskManager>,
    ) -> Self {
        let profile_store = state.profile_store.clone();
        Self {
            queue_manager,
            prometheus_handle,
            state,
            task_manager,
            profile_store,
        }
    }
}