Skip to content

Commit e933fd6

Browse files
authored
Add RawPacket (#276)
## Description Adds a `RawPacket` type to `valence_protocol`. This type simply reads and writes data to a slice, analogous to the `RawBytes` type in the same module. ## Test Plan Steps: 1. `cargo t -p valence_protocol`
1 parent 4a541a9 commit e933fd6

File tree

8 files changed

+34
-12
lines changed

8 files changed

+34
-12
lines changed

crates/valence/src/server/connect.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ use valence_protocol::packet::s2c::login::{
3131
LoginCompressionS2c, LoginDisconnectS2c, LoginHelloS2c, LoginQueryRequestS2c, LoginSuccessS2c,
3232
};
3333
use valence_protocol::packet::s2c::status::{QueryPongS2c, QueryResponseS2c};
34-
use valence_protocol::raw_bytes::RawBytes;
34+
use valence_protocol::raw::RawBytes;
3535
use valence_protocol::text::Text;
3636
use valence_protocol::types::Property;
3737
use valence_protocol::username::Username;

crates/valence_protocol/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ pub mod ident;
9595
mod impls;
9696
pub mod item;
9797
pub mod packet;
98-
pub mod raw_bytes;
98+
pub mod raw;
9999
pub mod sound;
100100
pub mod text;
101101
pub mod tracked_data;

crates/valence_protocol/src/packet/c2s/login/login_query_response.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::raw_bytes::RawBytes;
1+
use crate::raw::RawBytes;
22
use crate::var_int::VarInt;
33
use crate::{Decode, Encode};
44

crates/valence_protocol/src/packet/c2s/play/custom_payload.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::ident::Ident;
2-
use crate::raw_bytes::RawBytes;
2+
use crate::raw::RawBytes;
33
use crate::{Decode, Encode};
44

55
#[derive(Copy, Clone, Debug, Encode, Decode)]

crates/valence_protocol/src/packet/s2c/login/login_query_request.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::ident::Ident;
2-
use crate::raw_bytes::RawBytes;
2+
use crate::raw::RawBytes;
33
use crate::var_int::VarInt;
44
use crate::{Decode, Encode};
55

crates/valence_protocol/src/packet/s2c/play/custom_payload.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::ident::Ident;
2-
use crate::raw_bytes::RawBytes;
2+
use crate::raw::RawBytes;
33
use crate::{Decode, Encode};
44

55
#[derive(Copy, Clone, Debug, Encode, Decode)]

crates/valence_protocol/src/packet/s2c/play/entity_tracker_update.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::raw_bytes::RawBytes;
1+
use crate::raw::RawBytes;
22
use crate::var_int::VarInt;
33
use crate::{Decode, Encode};
44

crates/valence_protocol/src/raw_bytes.rs renamed to crates/valence_protocol/src/raw.rs

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::io::Write;
2+
use std::mem;
23

3-
use crate::{Decode, Encode, Result};
4+
use crate::{Decode, Encode, Packet, Result};
45

56
/// While [encoding], the contained slice is written directly to the output
67
/// without any length prefix or metadata.
@@ -10,7 +11,7 @@ use crate::{Decode, Encode, Result};
1011
///
1112
/// [encoding]: Encode
1213
/// [decoding]: Decode
13-
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
14+
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default, Debug)]
1415
pub struct RawBytes<'a>(pub &'a [u8]);
1516

1617
impl Encode for RawBytes<'_> {
@@ -21,9 +22,7 @@ impl Encode for RawBytes<'_> {
2122

2223
impl<'a> Decode<'a> for RawBytes<'a> {
2324
fn decode(r: &mut &'a [u8]) -> Result<Self> {
24-
let slice = *r;
25-
*r = &[];
26-
Ok(Self(slice))
25+
Ok(Self(mem::take(r)))
2726
}
2827
}
2928

@@ -38,3 +37,26 @@ impl<'a> From<RawBytes<'a>> for &'a [u8] {
3837
value.0
3938
}
4039
}
40+
41+
/// A fake [`Packet`] which simply reads all data into a slice, or writes all
42+
/// data from a slice. The packet ID is included in the slice.
43+
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default, Debug)]
44+
pub struct RawPacket<'a>(pub &'a [u8]);
45+
46+
impl<'a> Packet<'a> for RawPacket<'a> {
47+
fn packet_id(&self) -> i32 {
48+
-1
49+
}
50+
51+
fn packet_name(&self) -> &str {
52+
"RawPacket"
53+
}
54+
55+
fn encode_packet(&self, mut w: impl Write) -> Result<()> {
56+
Ok(w.write_all(self.0)?)
57+
}
58+
59+
fn decode_packet(r: &mut &'a [u8]) -> Result<Self> {
60+
Ok(Self(mem::take(r)))
61+
}
62+
}

0 commit comments

Comments
 (0)