Skip to main content

TidePoolLayer

Trait TidePoolLayer 

Source
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§

Source

fn enqueue(&mut self, msg: &[u8]) -> bool

Enqueue a message for routing. Returns true if accepted into the buffer.

Source

fn dequeue(&mut self) -> Option<Vec<u8>>

Dequeue the next routed message. Returns None if the buffer is empty.

Source

fn buffer_len(&self) -> usize

Number of messages currently buffered.

Implementors§