pub mod fields;
mod errors;
mod net;
pub mod packets;
use std::io::{Read, Write};
use crate::errors::Result;
pub use crate::errors::Errors;
pub use crate::fields::PacketReader;
pub use crate::net::{send_packet, receive_packet, receive_unknown_packet, UnknownPacket, EncryptedTcp};
pub trait Packet: Sized {
const ID: i32;
fn to_bytes(&self) -> Vec<u8>;
fn from_reader(reader: &mut PacketReader) -> Result<Self>;
}
pub trait Field: Sized + Clone {
fn to_bytes(&self) -> Vec<u8>;
fn from_reader(reader: &mut PacketReader) -> Result<Self>;
}
impl<T: Field> Field for Box<T> {
fn to_bytes(&self) -> Vec<u8> {
Field::to_bytes(self.as_ref())
}
fn from_reader(reader: &mut PacketReader) -> Result<Self> {
Ok(Self::new(reader.read::<T>()?))
}
}
pub trait Stream: Read + Write {}
impl<T> Stream for T where T: Read + Write {}