diff --git a/src/lib.rs b/src/lib.rs index 2c96a11..308eedf 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,4 @@ +//! # Isabelle's Lazy Message Protocol #![allow(dead_code)] use futures_util::io::{AsyncReadExt, AsyncWriteExt}; @@ -14,17 +15,20 @@ pub type Result = std::result::Result; struct NetworkPacket(Vec); +/// A type of data that can be sent pub trait Sendable: Sized { fn to_packet(self) -> Result; fn from_packet(packet: Packet) -> Result; } +/// Data to be sent pub struct Packet { kind: PacketKind, contents: Vec, } impl Packet { + /// Create a new `Packet` pub fn new(kind: PacketKind, contents: Vec) -> Packet { Packet { kind, contents } } @@ -44,6 +48,7 @@ impl Packet { } } +/// reads a `Packet` from a stream pub async fn read(stream: &mut S) -> Result> where S: AsyncReadExt + Unpin, @@ -65,6 +70,7 @@ where Ok(Some(packet)) } +/// Writes a `Sendable` packet to a stream pub async fn write(stream: &mut S, packet: P) -> Result<()> where S: AsyncWriteExt + Unpin, @@ -75,13 +81,16 @@ where Ok(()) } +/// Kinds of packets that can be sent #[derive(Debug, Clone, Copy, PartialEq, Eq)] #[repr(u8)] pub enum PacketKind { Message = 0, + PublicKey = 1, } impl PacketKind { + /// returns `Option given valid matching variant pub fn from_u8(kind: u8) -> Option { match kind { 0 => Some(PacketKind::Message), diff --git a/src/message.rs b/src/message.rs index c8bb46c..10778c1 100644 --- a/src/message.rs +++ b/src/message.rs @@ -3,6 +3,7 @@ use chrono::prelude::*; use serde::{Deserialize, Serialize}; use uuid::Uuid; +/// a standard message from a user #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Message { pub timestamp: i64, @@ -12,6 +13,7 @@ pub struct Message { } impl Message { + /// create a new message pub fn new(username: String, contents: String) -> Message { let timestamp = Utc::now().timestamp(); let message_id = Uuid::new_v4().as_u128();