use super::common::UserRole;
use serde::ser::{SerializeStruct, Serializer};
use serde::Serialize;
use std::fmt;
#[derive(Clone)]
pub struct SiemUseCase {
pub name: &'static str,
pub description: &'static str,
pub case_logic: &'static str,
pub limitations: &'static str,
pub requirements: (
Option<&'static str>,
Option<&'static str>,
Option<&'static str>,
),
pub rule: &'static str,
pub actions: Vec<SiemPlaybookStep>,
}
impl fmt::Debug for SiemUseCase {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("Point")
.field("name", &self.name)
.field("description", &self.description)
.finish()
}
}
impl Serialize for SiemUseCase {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
let mut state = serializer.serialize_struct("SiemAutomatedStep", 7)?;
state.serialize_field("name", &self.name)?;
state.serialize_field("description", &self.description)?;
state.serialize_field("case_logic", &self.case_logic)?;
state.serialize_field("limitations", &self.limitations)?;
state.serialize_field("rule", &self.rule)?;
state.serialize_field("actions", &self.actions)?;
state.serialize_field("requirements", &self.requirements)?;
state.end()
}
}
#[derive(Debug, Serialize, Clone)]
pub enum SiemPlaybookStep {
Manual(&'static str, &'static str),
Automated(SiemAutomatedStep),
}
#[derive(Clone)]
pub struct SiemAutomatedStep {
pub min_role: UserRole,
pub action: &'static str,
pub name: &'static str,
pub description: &'static str,
}
impl Serialize for SiemAutomatedStep {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
let mut state = serializer.serialize_struct("SiemAutomatedStep", 3)?;
state.serialize_field("min_role", &self.min_role)?;
state.serialize_field("name", &self.name)?;
state.serialize_field("description", &self.description)?;
state.end()
}
}
impl fmt::Debug for SiemAutomatedStep {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("Point")
.field("name", &self.name)
.field("description", &self.description)
.finish()
}
}