ant_node/payment/
metrics.rs1use std::sync::atomic::{AtomicUsize, Ordering};
8
9#[derive(Debug)]
14pub struct QuotingMetricsTracker {
15 close_records_stored: AtomicUsize,
16}
17
18impl QuotingMetricsTracker {
19 #[must_use]
25 pub fn new(initial_records: usize) -> Self {
26 Self {
27 close_records_stored: AtomicUsize::new(initial_records),
28 }
29 }
30
31 pub fn record_store(&self) {
33 self.close_records_stored.fetch_add(1, Ordering::SeqCst);
34 }
35
36 #[must_use]
38 pub fn records_stored(&self) -> usize {
39 self.close_records_stored.load(Ordering::SeqCst)
40 }
41}
42
43#[cfg(test)]
44mod tests {
45 use super::*;
46
47 #[test]
48 fn test_new_tracker() {
49 let tracker = QuotingMetricsTracker::new(50);
50 assert_eq!(tracker.records_stored(), 50);
51 }
52
53 #[test]
54 fn test_record_store_increments_counter() {
55 let tracker = QuotingMetricsTracker::new(0);
56 assert_eq!(tracker.records_stored(), 0);
57
58 tracker.record_store();
59 assert_eq!(tracker.records_stored(), 1);
60
61 tracker.record_store();
62 tracker.record_store();
63 assert_eq!(tracker.records_stored(), 3);
64 }
65}