aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJoey Sacchini <joey@sacchini.net>2020-10-13 16:35:29 -0400
committerJoey Sacchini <joey@sacchini.net>2020-10-13 16:35:29 -0400
commit0091ef202070082541fba45d592546b09dbabfa9 (patch)
tree477b7b9a7723330d0c1cd6c6b8e961e548a3fa2e /src
parentd69e6ca48caa85ac29ae3918363ef4be9861afe5 (diff)
downloadmcproto-rs-0091ef202070082541fba45d592546b09dbabfa9.tar.gz
mcproto-rs-0091ef202070082541fba45d592546b09dbabfa9.tar.bz2
mcproto-rs-0091ef202070082541fba45d592546b09dbabfa9.zip
remove that needless nightly feature and just use a plain ol' function
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs1
-rw-r--r--src/types.rs53
2 files changed, 22 insertions, 32 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 54f4aa3..bea81eb 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,4 +1,3 @@
-#![feature(impl_trait_in_bindings)]
#![feature(const_fn)]
#![feature(test)]
diff --git a/src/types.rs b/src/types.rs
index cda622a..734f40f 100644
--- a/src/types.rs
+++ b/src/types.rs
@@ -210,11 +210,6 @@ impl TestRandom for f64 {
const VAR_INT_BYTES: usize = 5;
const VAR_LONG_BYTES: usize = 10;
-const DESERIALIZE_VAR_INT: impl for<'b> Fn(&'b [u8]) -> DeserializeResult<'b, u64> =
- deserialize_var_num(VAR_INT_BYTES);
-const DESERIALIZE_VAR_LONG: impl for<'b> Fn(&'b [u8]) -> DeserializeResult<'b, u64> =
- deserialize_var_num(VAR_LONG_BYTES);
-
#[derive(Copy, Clone, PartialOrd, PartialEq, Debug, Default, Hash, Ord, Eq)]
pub struct VarInt(pub i32);
@@ -227,7 +222,7 @@ impl Serialize for VarInt {
impl Deserialize for VarInt {
fn mc_deserialize(orig_data: &[u8]) -> DeserializeResult<Self> {
- Ok(DESERIALIZE_VAR_INT(orig_data)?.map(move |v| VarInt(v as i32)))
+ Ok(deserialize_var_num(orig_data, VAR_INT_BYTES)?.map(move |v| VarInt(v as i32)))
}
}
@@ -281,7 +276,7 @@ impl Serialize for VarLong {
impl Deserialize for VarLong {
fn mc_deserialize(orig_data: &[u8]) -> DeserializeResult<'_, Self> {
- Ok(DESERIALIZE_VAR_LONG(orig_data)?.map(move |v| VarLong(v as i64)))
+ Ok(deserialize_var_num(orig_data, VAR_LONG_BYTES)?.map(move |v| VarLong(v as i64)))
}
}
@@ -316,33 +311,29 @@ fn serialize_var_num(data: u64, out: &mut [u8]) -> &[u8] {
&out[..byte_idx]
}
-const fn deserialize_var_num(
- max_bytes: usize,
-) -> impl for<'b> Fn(&'b [u8]) -> DeserializeResult<'b, u64> {
- move |orig_data| {
- let mut data = orig_data;
- let mut v: u64 = 0;
- let mut bit_place: usize = 0;
- let mut i: usize = 0;
- let mut has_more = true;
+fn deserialize_var_num(orig_data: &[u8], max_bytes: usize) -> DeserializeResult<u64> {
+ let mut data = orig_data;
+ let mut v: u64 = 0;
+ let mut bit_place: usize = 0;
+ let mut i: usize = 0;
+ let mut has_more = true;
- while has_more {
- if i == max_bytes {
- return DeserializeErr::VarNumTooLong(Vec::from(&orig_data[..i])).into();
- }
- let Deserialized {
- value: byte,
- data: rest,
- } = read_one_byte(data)?;
- data = rest;
- has_more = byte & 0x80 != 0;
- v |= ((byte as u64) & 0x7F) << bit_place;
- bit_place += 7;
- i += 1;
+ while has_more {
+ if i == max_bytes {
+ return DeserializeErr::VarNumTooLong(Vec::from(&orig_data[..i])).into();
}
-
- Deserialized::ok(v, data)
+ let Deserialized {
+ value: byte,
+ data: rest,
+ } = read_one_byte(data)?;
+ data = rest;
+ has_more = byte & 0x80 != 0;
+ v |= ((byte as u64) & 0x7F) << bit_place;
+ bit_place += 7;
+ i += 1;
}
+
+ Deserialized::ok(v, data)
}
// STRING