aboutsummaryrefslogtreecommitdiff
path: root/src/connection.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/connection.rs')
-rw-r--r--src/connection.rs55
1 files changed, 51 insertions, 4 deletions
diff --git a/src/connection.rs b/src/connection.rs
index 8de42f3..f53f07d 100644
--- a/src/connection.rs
+++ b/src/connection.rs
@@ -4,7 +4,8 @@ use crate::reader::{CraftReader, CraftSyncReader, ReadResult};
use crate::wrapper::{CraftIo, CraftWrapper};
use crate::writer::{CraftSyncWriter, CraftWriter, WriteResult};
use mcproto_rs::protocol::{Packet, RawPacket, State};
-
+#[cfg(feature = "gat")]
+use mcproto_rs::protocol::PacketKind;
#[cfg(any(feature = "futures-io", feature = "tokio-io"))]
use {
crate::{reader::CraftAsyncReader, writer::CraftAsyncWriter},
@@ -16,9 +17,9 @@ pub struct CraftConnection<R, W> {
pub(crate) writer: CraftWriter<W>,
}
-impl<R, W> CraftWrapper<(CraftReader<R>, CraftWriter<W>)> for CraftConnection<R, W> {
- fn into_inner(self) -> (CraftReader<R>, CraftWriter<W>) {
- (self.reader, self.writer)
+impl<R, W> CraftWrapper<(R, W)> for CraftConnection<R, W> {
+ fn into_inner(self) -> (R, W) {
+ (self.reader.into_inner(), self.writer.into_inner())
}
}
@@ -47,6 +48,7 @@ where
CraftReader<R>: CraftSyncReader,
CraftWriter<W>: CraftSyncWriter,
{
+ #[cfg(not(feature = "gat"))]
fn read_packet<'a, P>(&'a mut self) -> ReadResult<<P as RawPacket<'a>>::Packet>
where
P: RawPacket<'a>,
@@ -54,12 +56,29 @@ where
self.reader.read_packet::<P>()
}
+ #[cfg(feature = "gat")]
+ fn read_packet<P>(&mut self) -> ReadResult<<P::RawPacket<'_> as RawPacket>::Packet>
+ where
+ P: PacketKind
+ {
+ self.reader.read_packet::<P>()
+ }
+
+ #[cfg(not(feature = "gat"))]
fn read_raw_packet<'a, P>(&'a mut self) -> ReadResult<P>
where
P: RawPacket<'a>,
{
self.reader.read_raw_packet::<P>()
}
+
+ #[cfg(feature = "gat")]
+ fn read_raw_packet<P>(&mut self) -> ReadResult<P::RawPacket<'_>>
+ where
+ P: PacketKind
+ {
+ self.reader.read_raw_packet::<P>()
+ }
}
impl<R, W> CraftSyncWriter for CraftConnection<R, W>
@@ -91,6 +110,7 @@ where
CraftWriter<W>: CraftAsyncWriter,
W: Send + Sync,
{
+ #[cfg(not(feature = "gat"))]
async fn read_packet_async<'a, P>(&'a mut self) -> ReadResult<<P as RawPacket<'a>>::Packet>
where
P: RawPacket<'a>,
@@ -98,12 +118,29 @@ where
self.reader.read_packet_async::<P>().await
}
+ #[cfg(feature = "gat")]
+ async fn read_packet_async<P>(&mut self) -> ReadResult<<P::RawPacket<'_> as RawPacket<'_>>::Packet>
+ where
+ P: PacketKind
+ {
+ self.reader.read_packet_async::<P>().await
+ }
+
+ #[cfg(not(feature = "gat"))]
async fn read_raw_packet_async<'a, P>(&'a mut self) -> ReadResult<P>
where
P: RawPacket<'a>,
{
self.reader.read_raw_packet_async::<P>().await
}
+
+ #[cfg(feature = "gat")]
+ async fn read_raw_packet_async<P>(&mut self) -> ReadResult<P::RawPacket<'_>>
+ where
+ P: PacketKind
+ {
+ self.reader.read_raw_packet_async::<P>().await
+ }
}
#[cfg(any(feature = "futures-io", feature = "tokio-io"))]
@@ -129,3 +166,13 @@ where
self.writer.write_raw_packet_async(packet).await
}
}
+
+impl<R, W> CraftConnection<R, W> {
+ pub fn into_split(self) -> (CraftReader<R>, CraftWriter<W>) {
+ (self.reader, self.writer)
+ }
+
+ pub fn split(&mut self) -> (&mut CraftReader<R>, &mut CraftWriter<W>) {
+ (&mut self.reader, &mut self.writer)
+ }
+} \ No newline at end of file