use serde::{Deserialize, Serialize};
use super::process::OcsfUser;
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct Actor {
#[serde(skip_serializing_if = "Option::is_none")]
pub user: Option<OcsfUser>,
#[serde(skip_serializing_if = "Option::is_none")]
pub app_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub app_uid: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub session: Option<ActorSession>,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ActorSession {
#[serde(skip_serializing_if = "Option::is_none")]
pub uid: Option<String>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn actor_roundtrip() {
let a = Actor {
user: Some(OcsfUser {
name: Some("agent-1".to_string()),
uid: Some("agent-1".to_string()),
}),
app_name: Some("clawdstrike".to_string()),
app_uid: Some("hushd".to_string()),
session: Some(ActorSession {
uid: Some("sess-123".to_string()),
}),
};
let json = serde_json::to_string(&a).unwrap();
let a2: Actor = serde_json::from_str(&json).unwrap();
assert_eq!(a, a2);
}
}