use crate::prelude::types::LogString;
use crate::prelude::SiemResult;
use crossbeam_channel::{Receiver, Sender};
use self::dataset::holder::DatasetHolder;
use super::events::SiemLog;
use common::{SiemComponentCapabilities, SiemMessage};
use dataset::SiemDatasetType;
use std::boxed::Box;
use std::collections::BTreeMap;
use std::sync::{Arc, Mutex};
use storage::SiemComponentStateStorage;
pub mod alert;
pub mod command;
pub mod command_types;
pub mod common;
pub mod dataset;
pub mod enrichment;
pub mod kernel_message;
pub mod metrics;
pub mod mitre;
pub mod parsing;
pub mod query;
pub mod rule;
pub mod storage;
pub mod task;
pub mod use_case;
pub trait SiemComponent: Send {
fn name(&self) -> &'static str {
"SiemComponent"
}
fn local_channel(&self) -> Sender<SiemMessage>;
fn set_log_channel(&mut self, sender: Sender<SiemLog>, receiver: Receiver<SiemLog>);
fn run(&mut self) -> SiemResult<()>;
fn set_storage(&mut self, conn: Box<dyn SiemComponentStateStorage>);
fn capabilities(&self) -> SiemComponentCapabilities;
fn duplicate(&self) -> Box<dyn SiemComponent>;
fn set_datasets(&mut self, datasets: DatasetHolder);
}
pub trait SiemDatasetManager: Send {
fn set_id(&mut self, id: u64);
fn name(&self) -> &str {
"SiemDatasetManager"
}
fn local_channel(&self) -> Sender<SiemMessage>;
fn run(&mut self) -> SiemResult<()>;
fn register_dataset(&mut self, dataset: SiemDatasetType);
fn register_datasets(&mut self, datasets: Vec<SiemDatasetType>);
fn get_datasets(&self) -> Arc<Mutex<DatasetHolder>>;
}
pub trait SiemRuleEngine: SiemComponent {
fn set_languages(&mut self, languages: BTreeMap<LogString, BTreeMap<LogString, LogString>>);
}