maple_runtime/types/
temporal.rs1use super::ids::{AnchorId, CommitmentId};
7use chrono::{DateTime, Utc};
8use serde::{Deserialize, Serialize};
9
10#[derive(Debug, Clone, Serialize, Deserialize)]
14pub struct TemporalAnchor {
15 pub id: AnchorId,
17
18 pub local_time: LocalTimestamp,
23
24 pub causal_deps: Vec<AnchorId>,
28
29 pub commitment: Option<CommitmentId>,
31}
32
33impl TemporalAnchor {
34 pub fn now() -> Self {
36 Self {
37 id: AnchorId::generate(),
38 local_time: LocalTimestamp::now(),
39 causal_deps: Vec::new(),
40 commitment: None,
41 }
42 }
43
44 pub fn with_deps(causal_deps: Vec<AnchorId>) -> Self {
46 Self {
47 id: AnchorId::generate(),
48 local_time: LocalTimestamp::now(),
49 causal_deps,
50 commitment: None,
51 }
52 }
53
54 pub fn add_dep(&mut self, dep: AnchorId) {
56 if !self.causal_deps.contains(&dep) {
57 self.causal_deps.push(dep);
58 }
59 }
60}
61
62#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
64pub struct LocalTimestamp {
65 pub sequence: u64,
67
68 pub wall_clock: DateTime<Utc>,
72}
73
74impl LocalTimestamp {
75 pub fn now() -> Self {
76 Self {
77 sequence: 0, wall_clock: Utc::now(),
79 }
80 }
81
82 pub fn with_sequence(sequence: u64) -> Self {
83 Self {
84 sequence,
85 wall_clock: Utc::now(),
86 }
87 }
88}
89
90impl Default for LocalTimestamp {
91 fn default() -> Self {
92 Self::now()
93 }
94}
95
96#[derive(Debug, Clone, Serialize, Deserialize)]
98pub struct TemporalConfig {
99 pub enable_wall_clock: bool,
101
102 pub max_causal_chain_length: usize,
104
105 pub enable_causal_verification: bool,
107}
108
109impl Default for TemporalConfig {
110 fn default() -> Self {
111 Self {
112 enable_wall_clock: true,
113 max_causal_chain_length: 1000,
114 enable_causal_verification: true,
115 }
116 }
117}