aisimulate_core/replay/
capture.rs1use serde::{Deserialize, Serialize};
5
6pub const CANONICAL_SELECTOR_SEED: u64 = 0xd1a0_5eed;
9
10#[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Serialize, Deserialize)]
12#[serde(rename_all = "snake_case")]
13pub enum ReplayDeterminism {
14 #[default]
16 Random,
17 CanonicalV1,
19}
20
21impl ReplayDeterminism {
22 pub const fn selector_seed(self) -> Option<u64> {
26 match self {
27 Self::Random => None,
28 Self::CanonicalV1 => Some(CANONICAL_SELECTOR_SEED),
29 }
30 }
31}
32
33#[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Serialize, Deserialize)]
35pub struct ReplayCaptureOptions {
36 #[serde(default)]
37 pub capture_per_request: bool,
38 #[serde(default)]
39 pub capture_lifecycle_evidence: bool,
40 #[serde(default)]
41 pub capture_canonical_evidence: bool,
42 #[serde(default)]
43 pub determinism: ReplayDeterminism,
44}
45
46impl ReplayCaptureOptions {
47 pub const fn effective_per_request(self) -> bool {
51 self.capture_per_request || self.capture_canonical_evidence
52 }
53}