assemblyline_models/datastore/
workflow.rs1use chrono::{DateTime, Utc};
7use serde::{Deserialize, Serialize};
8use serde_with::{SerializeDisplay, DeserializeFromStr};
9use struct_metadata::Described;
10
11use crate::{Uuid, ElasticMeta, ExpandingClassification};
12
13
14#[derive(SerializeDisplay, DeserializeFromStr, strum::Display, strum::EnumString, Described)]
15#[metadata_type(ElasticMeta)]
16#[strum(serialize_all = "UPPERCASE")]
17pub enum Priorities {
18 Low,
19 Medium,
20 High,
21 Critical,
22}
23
24#[derive(SerializeDisplay, DeserializeFromStr, strum::Display, strum::EnumString, Described)]
25#[metadata_type(ElasticMeta)]
26#[strum(serialize_all = "SCREAMING-KEBAB-CASE")]
27pub enum Statuses {
28 Malicious,
29 NonMalicious,
30 Assess,
31 Triage,
32}
33
34#[derive(Serialize, Deserialize, Described)]
36#[metadata_type(ElasticMeta)]
37#[metadata(index=true, store=true)]
38pub struct Workflow {
39 #[metadata(copyto="__text__")]
41 #[serde(flatten)]
42 pub classification: ExpandingClassification,
43 pub creation_date: DateTime<Utc>,
45 pub creator: String,
47 pub edited_by: String,
49 pub first_seen: Option<DateTime<Utc>>,
51 #[serde(default)]
53 pub hit_count: i64,
54 #[serde(default)]
56 #[metadata(copyto="__text__")]
57 pub labels: Vec<String>,
58 pub last_edit: DateTime<Utc>,
60 pub last_seen: Option<DateTime<Utc>>,
62 #[metadata(copyto="__text__")]
64 pub name: String,
65 pub origin: Option<String>,
67 #[metadata(copyto="__text__")]
69 pub priority: Option<Priorities>,
70 pub query: String,
72 #[metadata(copyto="__text__")]
74 pub status: Option<Statuses>,
75 pub workflow_id: Option<Uuid>,
77}