Skip to main content

hikmah_kernel/
prospective.rs

1use crate::ledger::MemoryStore;
2use crate::trace::{Trace, TraceKind};
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
6pub struct CommitmentDue {
7    pub trace: Trace,
8    pub overdue: bool,
9    pub due_in_ms: i128,
10}
11
12impl MemoryStore {
13    pub fn commitments_due(&self, now_ms: u64, within_ms: u64) -> Vec<CommitmentDue> {
14        let horizon = now_ms.saturating_add(within_ms);
15        let mut due = self
16            .active_traces()
17            .filter(|trace| trace.kind == TraceKind::Commitment)
18            .filter_map(|trace| {
19                let deadline = trace.deadline_ms?;
20                if deadline > horizon {
21                    return None;
22                }
23                Some(CommitmentDue {
24                    trace: trace.clone(),
25                    overdue: deadline <= now_ms,
26                    due_in_ms: deadline as i128 - now_ms as i128,
27                })
28            })
29            .collect::<Vec<_>>();
30        due.sort_by_key(|item| item.trace.deadline_ms.unwrap_or(u64::MAX));
31        due
32    }
33}