pub trait TidePoolLayer {
// Required methods
fn enqueue(&mut self, msg: &[u8]) -> bool;
fn dequeue(&mut self) -> Option<Vec<u8>>;
fn buffer_len(&self) -> usize;
}Expand description
Async message routing and buffering.
Implements L2 TidePool → plato-relay (trust-weighted BFS routing, spore probes).
§Examples
use plato_ship_protocol::TidePoolLayer;
struct MockTidePool { buf: std::collections::VecDeque<Vec<u8>> }
impl TidePoolLayer for MockTidePool {
fn enqueue(&mut self, msg: &[u8]) -> bool {
self.buf.push_back(msg.to_vec());
true
}
fn dequeue(&mut self) -> Option<Vec<u8>> { self.buf.pop_front() }
fn buffer_len(&self) -> usize { self.buf.len() }
}
let mut tp = MockTidePool { buf: std::collections::VecDeque::new() };
assert!(tp.enqueue(b"hello"));
assert_eq!(tp.buffer_len(), 1);
assert_eq!(tp.dequeue(), Some(b"hello".to_vec()));Required Methods§
Sourcefn enqueue(&mut self, msg: &[u8]) -> bool
fn enqueue(&mut self, msg: &[u8]) -> bool
Enqueue a message for routing. Returns true if accepted into the buffer.
Sourcefn dequeue(&mut self) -> Option<Vec<u8>>
fn dequeue(&mut self) -> Option<Vec<u8>>
Dequeue the next routed message. Returns None if the buffer is empty.
Sourcefn buffer_len(&self) -> usize
fn buffer_len(&self) -> usize
Number of messages currently buffered.