Skip to main content

ap_client/
memory_psk_store.rs

1use std::collections::HashMap;
2
3use async_trait::async_trait;
4
5use crate::error::ClientError;
6use crate::traits::{PskEntry, PskStore};
7use crate::types::PskId;
8
9/// In-memory PSK store that does not persist to disk.
10///
11/// Used for tests and examples where reusable PSKs should not be saved.
12pub struct MemoryPskStore {
13    entries: HashMap<PskId, PskEntry>,
14}
15
16impl MemoryPskStore {
17    pub fn new() -> Self {
18        Self {
19            entries: HashMap::new(),
20        }
21    }
22}
23
24impl Default for MemoryPskStore {
25    fn default() -> Self {
26        Self::new()
27    }
28}
29
30#[async_trait]
31impl PskStore for MemoryPskStore {
32    async fn get(&self, psk_id: &PskId) -> Option<PskEntry> {
33        self.entries.get(psk_id).cloned()
34    }
35
36    async fn save(&mut self, entry: PskEntry) -> Result<(), ClientError> {
37        self.entries.insert(entry.psk_id.clone(), entry);
38        Ok(())
39    }
40
41    async fn remove(&mut self, psk_id: &PskId) -> Result<(), ClientError> {
42        self.entries.remove(psk_id);
43        Ok(())
44    }
45
46    async fn list(&self) -> Vec<PskEntry> {
47        self.entries.values().cloned().collect()
48    }
49}