Files
Aether/crates/aether-usage/core/src/record.rs
T

46 lines
1.2 KiB
Rust

use serde::{Deserialize, Serialize};
use crate::{UsageEventError, UsageEventKind};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct UsageEventEnvelope {
pub event_id: String,
pub request_id: String,
pub subject_id: String,
pub kind: UsageEventKind,
pub sequence: u64,
}
impl UsageEventEnvelope {
pub fn validate(&self) -> Result<(), UsageEventError> {
if self.event_id.trim().is_empty() {
return Err(UsageEventError::MissingEventId);
}
if self.request_id.trim().is_empty() {
return Err(UsageEventError::MissingRequestId);
}
if self.subject_id.trim().is_empty() {
return Err(UsageEventError::MissingSubjectId);
}
Ok(())
}
}
#[cfg(test)]
mod tests {
use super::UsageEventEnvelope;
use crate::UsageEventKind;
#[test]
fn envelope_rejects_missing_identity() {
let event = UsageEventEnvelope {
event_id: String::new(),
request_id: "request".to_string(),
subject_id: "user".to_string(),
kind: UsageEventKind::Completed,
sequence: 1,
};
assert!(event.validate().is_err());
}
}