use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Seccomp {
pub default_action: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub default_errno_ret: Option<u32>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub architectures: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub flags: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub listener_path: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub listener_metadata: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub syscalls: Vec<SyscallRule>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SyscallRule {
pub names: Vec<String>,
pub action: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub errno_ret: Option<u32>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub args: Vec<SyscallArg>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SyscallArg {
pub index: u32,
pub value: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub value_two: Option<u64>,
pub op: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct TimeOffsets {
#[serde(skip_serializing_if = "Option::is_none")]
pub monotonic: Option<TimeOffset>,
#[serde(skip_serializing_if = "Option::is_none")]
pub boottime: Option<TimeOffset>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TimeOffset {
pub secs: i64,
pub nanosecs: u32,
}