#![allow(unused_imports, non_camel_case_types, non_snake_case, clippy::all)]
use serde::{Deserialize, Serialize};
use super::*;
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct Adversary {
pub id: String,
pub description: String,
pub capability_levels: Vec<Adversary_CapabilityLevels_Item>,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum Adversary_CapabilityLevels_Item {
#[serde(rename = "opportunistic")]
Opportunistic,
#[serde(rename = "targeted")]
Targeted,
#[serde(rename = "insider")]
Insider,
#[serde(rename = "nation-state")]
NationState,
#[serde(rename = "ai-assisted")]
AiAssisted,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct Asset {
pub id: String,
pub description: String,
pub criticality: RiskClass,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct Mitigation {
pub id: String,
pub applies_to: Vec<String>,
pub description: String,
pub status: Mitigation_Status,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum Mitigation_Status {
#[serde(rename = "planned")]
Planned,
#[serde(rename = "implemented")]
Implemented,
#[serde(rename = "not-applicable")]
NotApplicable,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ResidualRisk {
pub description: String,
pub accepted_by: ActorId,
pub accepted_at: Timestamp,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ThreatModel {
pub threat_model_version: ThreatModel_ThreatModelVersion,
pub project: String,
pub assets: Vec<Asset>,
pub adversaries: Vec<Adversary>,
pub attack_classes: Vec<String>,
pub mitigations: Vec<Mitigation>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub residual_risks: Option<Vec<ResidualRisk>>,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum ThreatModel_ThreatModelVersion {
#[serde(rename = "1")]
V1,
}