use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use crate::friction::{FrictionLevel, RiskContext};
use crate::label::Label;
use crate::vector::StateVector;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Snapshot {
pub label: Label,
pub friction: FrictionLevel,
pub vector: StateVector,
pub as_of: DateTime<Utc>,
pub version: u64,
}
impl Snapshot {
#[must_use]
pub fn new(label: Label, vector: StateVector, as_of: DateTime<Utc>, version: u64) -> Self {
let friction = FrictionLevel::from_label(label);
Self {
label,
friction,
vector,
as_of,
version,
}
}
#[must_use]
pub fn new_with_risk(
label: Label,
vector: StateVector,
as_of: DateTime<Utc>,
version: u64,
risk: RiskContext,
) -> Self {
let friction = FrictionLevel::from_label_and_risk(label, risk);
Self {
label,
friction,
vector,
as_of,
version,
}
}
}