2d3b4f4b91
* Added github actions templates * removed travis .yml file * initial clippy cleanup pass * fixed the rest of clippy warnings * Made github badges more fancy and consistent with the ones in sphinx * Updated local rustc version and removed compilation warningns * ... and fresh clippy warnings * formatting * beta clippy specific warnings fixed * Fixed all nightly clippy warnings * Fixed trying to unwrap a () * Actually running all tests * Correctly passing the --all flag * Hopefullly third time's a charm in fixing argument passing
58 lines
1.5 KiB
Rust
58 lines
1.5 KiB
Rust
use crate::message::OrderedMessage;
|
|
|
|
/// Assigns sequence numbers to outbound byte vectors. These messages can then
|
|
/// be reassembled into an ordered sequence by the `OrderedMessageSender`.
|
|
#[derive(Debug)]
|
|
pub struct OrderedMessageSender {
|
|
next_index: u64,
|
|
}
|
|
|
|
impl OrderedMessageSender {
|
|
pub fn new() -> OrderedMessageSender {
|
|
OrderedMessageSender { next_index: 0 }
|
|
}
|
|
|
|
/// Turns raw bytes into an OrderedMessage containing the original bytes
|
|
/// and a sequence number;
|
|
pub fn wrap_message(&mut self, input: Vec<u8>) -> OrderedMessage {
|
|
let message = OrderedMessage {
|
|
data: input.to_vec(),
|
|
index: self.next_index,
|
|
};
|
|
self.next_index += 1;
|
|
message
|
|
}
|
|
}
|
|
|
|
impl Default for OrderedMessageSender {
|
|
fn default() -> Self {
|
|
OrderedMessageSender::new()
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod ordered_message_sender {
|
|
use super::*;
|
|
|
|
mod when_input_bytes_are_empty {}
|
|
|
|
#[cfg(test)]
|
|
mod sequence_index_numbers {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn increase_as_messages_are_sent() {
|
|
let mut sender = OrderedMessageSender::new();
|
|
let first_bytes = vec![1, 2, 3, 4];
|
|
let second_bytes = vec![5, 6, 7, 8];
|
|
|
|
let first_message = sender.wrap_message(first_bytes);
|
|
|
|
assert_eq!(first_message.index, 0);
|
|
|
|
let second_message = sender.wrap_message(second_bytes);
|
|
assert_eq!(second_message.index, 1);
|
|
}
|
|
}
|
|
}
|