diff --git a/src/lib.rs b/src/lib.rs index 76f74de..9862795 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -13,7 +13,6 @@ //! | `u64::MAX` | packet contents | //! -use anyhow::Result; use futures_util::io::{AsyncReadExt, AsyncWriteExt}; use ring::digest; use std::convert::TryInto; @@ -23,11 +22,13 @@ use thiserror::Error; mod message; pub use message::Message; +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 to_packet(&self) -> Result; fn from_packet(packet: Packet) -> Result; } @@ -62,7 +63,7 @@ impl Packet { } } - fn to_network_packet(self) -> NetworkPacket { + fn to_network_packet(&self) -> NetworkPacket { let mut contents: Vec = Vec::new(); // write packet kind byte @@ -121,6 +122,13 @@ impl PacketKind { pub enum IlmpError { #[error("checksum integrity check failed: (expected {expected:?} found {found:?})")] BadChecksumIntegrity { expected: Vec, found: Vec }, + #[error("std::io error")] + // external error conversions + StdIo(#[from] std::io::Error), + #[error("serde_json error")] + SerdeJson(#[from] serde_json::error::Error), + #[error("string parsing error")] + StringParse(#[from] std::string::FromUtf8Error), } /// reads a `Packet` from a stream diff --git a/src/message.rs b/src/message.rs index 68fa0b2..082055a 100644 --- a/src/message.rs +++ b/src/message.rs @@ -29,7 +29,7 @@ impl Message { } impl crate::Sendable for Message { - fn to_packet(self) -> Result { + fn to_packet(&self) -> Result { let contents: Vec = serde_json::to_string(&self)?.into_bytes(); let checksum = digest::digest(&digest::SHA256, &contents).as_ref().to_vec(); let kind = PacketKind::Message;