use chrono::{DateTime, Utc};
use serde::{Serialize, Deserialize};
use serde_with::{SerializeDisplay, DeserializeFromStr};
use struct_metadata::Described;
use crate::{Classification, Uuid, ElasticMeta};
#[derive(SerializeDisplay, DeserializeFromStr, strum::Display, strum::EnumString, Described)]
#[metadata_type(ElasticMeta)]
#[strum(serialize_all = "UPPERCASE")]
pub enum Priorities {
Low,
Medium,
High,
Critical,
}
#[derive(SerializeDisplay, DeserializeFromStr, strum::Display, strum::EnumString, Described)]
#[metadata_type(ElasticMeta)]
#[strum(serialize_all = "SCREAMING-KEBAB-CASE")]
pub enum Statuses {
Malicious,
NonMalicious,
Assess,
Triage,
}
#[derive(Serialize, Deserialize, Described)]
#[metadata_type(ElasticMeta)]
#[metadata(index=true, store=true)]
pub struct Workflow {
#[metadata(copyto="__text__")]
pub classification: Classification,
pub creation_date: DateTime<Utc>,
pub creator: String,
pub edited_by: String,
pub first_seen: Option<DateTime<Utc>>,
#[serde(default)]
pub hit_count: i64,
#[serde(default)]
#[metadata(copyto="__text__")]
pub labels: Vec<String>,
pub last_edit: DateTime<Utc>,
pub last_seen: Option<DateTime<Utc>>,
#[metadata(copyto="__text__")]
pub name: String,
pub origin: Option<String>,
#[metadata(copyto="__text__")]
pub priority: Option<Priorities>,
pub query: String,
#[metadata(copyto="__text__")]
pub status: Option<Statuses>,
pub workflow_id: Option<Uuid>,
}