diff options
| author | mat <github@matdoes.dev> | 2022-01-02 17:19:04 -0600 |
|---|---|---|
| committer | mat <github@matdoes.dev> | 2022-01-02 17:19:04 -0600 |
| commit | 094c210dada7c0ee83c19965739312d2d00e4099 (patch) | |
| tree | 00b678a2aa0c03bbfde12475431d749c0b2b837f /azalea-protocol/src | |
| parent | bb566aa54131a23b6d9e605c81a8ff4d1d1c21d7 (diff) | |
| download | azalea-drasl-094c210dada7c0ee83c19965739312d2d00e4099.tar.xz | |
switch all current macro types to the new system
Diffstat (limited to 'azalea-protocol/src')
| -rw-r--r-- | azalea-protocol/src/mc_buf/read.rs | 66 | ||||
| -rw-r--r-- | azalea-protocol/src/mc_buf/write.rs | 42 | ||||
| -rw-r--r-- | azalea-protocol/src/packets/mod.rs | 24 |
3 files changed, 131 insertions, 1 deletions
diff --git a/azalea-protocol/src/mc_buf/read.rs b/azalea-protocol/src/mc_buf/read.rs index 683c7d9a..374e5443 100644 --- a/azalea-protocol/src/mc_buf/read.rs +++ b/azalea-protocol/src/mc_buf/read.rs @@ -238,3 +238,69 @@ impl McBufReadable for Vec<u8> { buf.read_bytes().await } } + +// string +#[async_trait] +impl McBufReadable for String { + async fn read_into<R>(buf: &mut R) -> Result<Self, String> + where + R: AsyncRead + std::marker::Unpin + std::marker::Send, + { + buf.read_utf().await + } +} + +// ResourceLocation +#[async_trait] +impl McBufReadable for ResourceLocation { + async fn read_into<R>(buf: &mut R) -> Result<Self, String> + where + R: AsyncRead + std::marker::Unpin + std::marker::Send, + { + buf.read_resource_location().await + } +} + +// u32 +#[async_trait] +impl McBufReadable for u32 { + async fn read_into<R>(buf: &mut R) -> Result<Self, String> + where + R: AsyncRead + std::marker::Unpin + std::marker::Send, + { + buf.read_int().await.map(|i| i as u32) + } +} + +// u32 varint +#[async_trait] +impl McBufVarintReadable for u32 { + async fn varint_read_into<R>(buf: &mut R) -> Result<Self, String> + where + R: AsyncRead + std::marker::Unpin + std::marker::Send, + { + buf.read_varint().await.map(|i| i as u32) + } +} + +// u16 +#[async_trait] +impl McBufReadable for u16 { + async fn read_into<R>(buf: &mut R) -> Result<Self, String> + where + R: AsyncRead + std::marker::Unpin + std::marker::Send, + { + buf.read_short().await.map(|i| i as u16) + } +} + +// u16 varint +#[async_trait] +impl McBufVarintReadable for u16 { + async fn varint_read_into<R>(buf: &mut R) -> Result<Self, String> + where + R: AsyncRead + std::marker::Unpin + std::marker::Send, + { + buf.read_varint().await.map(|i| i as u16) + } +} diff --git a/azalea-protocol/src/mc_buf/write.rs b/azalea-protocol/src/mc_buf/write.rs index 7b1ac861..f22b218a 100644 --- a/azalea-protocol/src/mc_buf/write.rs +++ b/azalea-protocol/src/mc_buf/write.rs @@ -184,3 +184,45 @@ impl McBufWritable for Vec<u8> { buf.write_bytes(self) } } + +// string +impl McBufWritable for String { + fn write_into(&self, buf: &mut Vec<u8>) -> Result<(), std::io::Error> { + buf.write_utf(self) + } +} + +// ResourceLocation +impl McBufWritable for ResourceLocation { + fn write_into(&self, buf: &mut Vec<u8>) -> Result<(), std::io::Error> { + buf.write_resource_location(self) + } +} + +// u32 +impl McBufWritable for u32 { + fn write_into(&self, buf: &mut Vec<u8>) -> Result<(), std::io::Error> { + buf.write_varint(*self as i32) + } +} + +// u32 varint +impl McBufVarintWritable for u32 { + fn varint_write_into(&self, buf: &mut Vec<u8>) -> Result<(), std::io::Error> { + buf.write_varint(*self as i32) + } +} + +// u16 +impl McBufWritable for u16 { + fn write_into(&self, buf: &mut Vec<u8>) -> Result<(), std::io::Error> { + buf.write_varint(*self as i32) + } +} + +// u16 varint +impl McBufVarintWritable for u16 { + fn varint_write_into(&self, buf: &mut Vec<u8>) -> Result<(), std::io::Error> { + buf.write_varint(*self as i32) + } +} diff --git a/azalea-protocol/src/packets/mod.rs b/azalea-protocol/src/packets/mod.rs index 0f1cd2f0..f35451c6 100644 --- a/azalea-protocol/src/packets/mod.rs +++ b/azalea-protocol/src/packets/mod.rs @@ -3,9 +3,14 @@ pub mod handshake; pub mod login; pub mod status; -use crate::connect::PacketFlow; +use crate::{ + connect::PacketFlow, + mc_buf::{McBufReadable, McBufWritable, Readable, Writable}, +}; use async_trait::async_trait; use num_derive::FromPrimitive; +use num_traits::FromPrimitive; +use tokio::io::AsyncRead; pub const PROTOCOL_VERSION: u32 = 757; @@ -44,3 +49,20 @@ where fn write(&self, buf: &mut Vec<u8>) -> Result<(), std::io::Error>; } + +#[async_trait] +impl McBufReadable for ConnectionProtocol { + async fn read_into<R>(buf: &mut R) -> Result<Self, String> + where + R: AsyncRead + std::marker::Unpin + std::marker::Send, + { + ConnectionProtocol::from_i32(buf.read_varint().await?) + .ok_or_else(|| "Invalid intention".to_string()) + } +} + +impl McBufWritable for ConnectionProtocol { + fn write_into(&self, buf: &mut Vec<u8>) -> Result<(), std::io::Error> { + buf.write_varint(self.clone() as i32) + } +} |
