mirror of
https://github.com/mikedilger/gossip.git
synced 2024-09-29 08:21:47 +00:00
39 lines
961 B
Rust
39 lines
961 B
Rust
pub struct StatusQueue {
|
|
head: usize,
|
|
messages: [String; 3],
|
|
}
|
|
|
|
impl Default for StatusQueue {
|
|
fn default() -> StatusQueue {
|
|
StatusQueue {
|
|
head: 0,
|
|
messages: ["".to_owned(), "".to_owned(), "".to_owned()],
|
|
}
|
|
}
|
|
}
|
|
|
|
impl StatusQueue {
|
|
pub fn new(initial: String) -> StatusQueue {
|
|
let mut sq: StatusQueue = Default::default();
|
|
sq.write(initial);
|
|
sq
|
|
}
|
|
|
|
pub fn read_all(&self) -> [String; 3] {
|
|
[
|
|
self.messages[self.head].to_owned(),
|
|
self.messages[(self.head + 1) % 3].to_owned(),
|
|
self.messages[(self.head + 2) % 3].to_owned(),
|
|
]
|
|
}
|
|
|
|
pub fn write(&mut self, message: String) {
|
|
self.head = (self.head + 2) % 3; // like -1, but modular safe
|
|
self.messages[self.head] = message;
|
|
}
|
|
|
|
pub fn dismiss(&mut self, offset: usize) {
|
|
self.messages[(self.head + offset) % 3] = "".to_owned();
|
|
}
|
|
}
|