rns_embedded_mininode/
store.rs1use alloc::vec::Vec;
2use rns_core::identity::{Identity, PRIVATE_KEY_LENGTH};
3
4use crate::{
5 error::MiniNodeError,
6 telemetry::{PositionFix, TelemetryPoint},
7};
8
9#[derive(Clone)]
10pub struct NeighborSnapshot {
11 pub destination_hash: [u8; 16],
12 pub identity: Identity,
13 pub last_seen_ms: u64,
14 pub app_data: Vec<u8>,
15}
16
17#[derive(Clone, Default)]
18pub struct NodeSnapshot {
19 pub last_announce_ms: Option<u64>,
20 pub neighbors: Vec<NeighborSnapshot>,
21 pub recent_message_ids: Vec<[u8; 32]>,
22 pub telemetry: Vec<TelemetryPoint>,
23 pub latest_position: Option<PositionFix>,
24}
25
26pub trait MiniNodeStore {
27 fn load_identity(&self) -> Result<Option<[u8; PRIVATE_KEY_LENGTH]>, MiniNodeError>;
28 fn save_identity(
29 &mut self,
30 identity_bytes: &[u8; PRIVATE_KEY_LENGTH],
31 ) -> Result<(), MiniNodeError>;
32 fn load_snapshot(&self) -> Result<Option<NodeSnapshot>, MiniNodeError>;
33 fn save_snapshot(&mut self, snapshot: &NodeSnapshot) -> Result<(), MiniNodeError>;
34}
35
36#[derive(Clone, Default)]
37pub struct MemoryStore {
38 identity: Option<[u8; PRIVATE_KEY_LENGTH]>,
39 snapshot: Option<NodeSnapshot>,
40}
41
42impl MemoryStore {
43 pub fn new() -> Self {
44 Self::default()
45 }
46}
47
48impl MiniNodeStore for MemoryStore {
49 fn load_identity(&self) -> Result<Option<[u8; PRIVATE_KEY_LENGTH]>, MiniNodeError> {
50 Ok(self.identity)
51 }
52
53 fn save_identity(
54 &mut self,
55 identity_bytes: &[u8; PRIVATE_KEY_LENGTH],
56 ) -> Result<(), MiniNodeError> {
57 self.identity = Some(*identity_bytes);
58 Ok(())
59 }
60
61 fn load_snapshot(&self) -> Result<Option<NodeSnapshot>, MiniNodeError> {
62 Ok(self.snapshot.clone())
63 }
64
65 fn save_snapshot(&mut self, snapshot: &NodeSnapshot) -> Result<(), MiniNodeError> {
66 self.snapshot = Some(snapshot.clone());
67 Ok(())
68 }
69}