relay_server/services/buffer/stack_provider/
memory.rs1use crate::EnvelopeStack;
2use crate::services::buffer::common::ProjectKeyPair;
3use crate::services::buffer::envelope_stack::memory::MemoryEnvelopeStack;
4use crate::services::buffer::stack_provider::{
5 InitializationState, StackCreationType, StackProvider,
6};
7use crate::utils::MemoryChecker;
8
9#[derive(Debug)]
10pub struct MemoryStackProvider {
11 memory_checker: MemoryChecker,
12}
13
14impl MemoryStackProvider {
15 pub fn new(memory_checker: MemoryChecker) -> Self {
18 Self { memory_checker }
19 }
20}
21
22impl StackProvider for MemoryStackProvider {
23 type Stack = MemoryEnvelopeStack;
24
25 async fn initialize(&self) -> InitializationState {
26 InitializationState::empty()
27 }
28
29 fn create_stack(&self, _: StackCreationType, _: ProjectKeyPair) -> Self::Stack {
30 MemoryEnvelopeStack::new()
31 }
32
33 fn has_store_capacity(&self) -> bool {
34 self.memory_checker.check_memory().has_capacity()
35 }
36
37 async fn store_total_count(&self) -> u64 {
38 0
40 }
41
42 fn total_size(&self) -> Option<u64> {
43 None
45 }
46
47 fn stack_type<'a>(&self) -> &'a str {
48 "memory"
49 }
50
51 async fn flush(&mut self, envelope_stacks: impl IntoIterator<Item = Self::Stack>) {
52 for envelope_stack in envelope_stacks {
53 envelope_stack.flush().await;
55 }
56 }
57}