From 1ad7a9c24f8368f678807adbe1007ceb1f3b5ad0 Mon Sep 17 00:00:00 2001 From: godotg Date: Sun, 21 Jul 2024 17:05:56 +0800 Subject: [PATCH] feat[rust]: cut down rust protocol --- .../serializer/CutDownArraySerializer.java | 94 ++++++++- .../serializer/CutDownListSerializer.java | 52 ++++- .../src/main/resources/rust/byte_buffer.rs | 180 +++++++++++++++++- .../src/main/resources/rust/i_byte_buffer.rs | 18 +- 4 files changed, 337 insertions(+), 7 deletions(-) diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownArraySerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownArraySerializer.java index 6ba71992..cf002f13 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownArraySerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownArraySerializer.java @@ -50,6 +50,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}.writeBoolArray($1, {});", EnhanceUtils.byteBufUtils, objectStr)); break; + case Rust: + builder.append(StringUtils.format("buffer.writeBoolArray(&{});", objectStr)).append(LS); + break; case Kotlin, Scala, GdScript, Python: builder.append(StringUtils.format("buffer.writeBoolArray({})", objectStr)).append(LS); break; @@ -77,6 +80,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}.writeBoolBoxArray($1, {});", EnhanceUtils.byteBufUtils, objectStr)); break; + case Rust: + builder.append(StringUtils.format("buffer.writeBoolArray(&{});", objectStr)).append(LS); + break; case Kotlin, Scala, GdScript, Python: builder.append(StringUtils.format("buffer.writeBoolArray({})", objectStr)).append(LS); break; @@ -104,6 +110,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}.writeByteArray($1, {});", EnhanceUtils.byteBufUtils, objectStr)); break; + case Rust: + builder.append(StringUtils.format("buffer.writeByteArray(&{});", objectStr)).append(LS); + break; case Kotlin, Scala, GdScript, Python: builder.append(StringUtils.format("buffer.writeByteArray({})", objectStr)).append(LS); break; @@ -131,6 +140,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}.writeByteBoxArray($1, {});", EnhanceUtils.byteBufUtils, objectStr)); break; + case Rust: + builder.append(StringUtils.format("buffer.writeByteArray(&{});", objectStr)).append(LS); + break; case Kotlin, Scala, GdScript, Python: builder.append(StringUtils.format("buffer.writeByteArray({})", objectStr)).append(LS); break; @@ -158,6 +170,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}.writeShortArray($1, {});", EnhanceUtils.byteBufUtils, objectStr)); break; + case Rust: + builder.append(StringUtils.format("buffer.writeShortArray(&{});", objectStr)).append(LS); + break; case Kotlin, Scala, GdScript, Python: builder.append(StringUtils.format("buffer.writeShortArray({})", objectStr)).append(LS); break; @@ -185,6 +200,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}.writeShortBoxArray($1, {});", EnhanceUtils.byteBufUtils, objectStr)); break; + case Rust: + builder.append(StringUtils.format("buffer.writeShortArray(&{});", objectStr)).append(LS); + break; case Kotlin, Scala, GdScript, Python: builder.append(StringUtils.format("buffer.writeShortArray({})", objectStr)).append(LS); break; @@ -212,6 +230,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}.writeIntArray($1, {});", EnhanceUtils.byteBufUtils, objectStr)); break; + case Rust: + builder.append(StringUtils.format("buffer.writeIntArray(&{});", objectStr)).append(LS); + break; case Kotlin, Scala, GdScript, Python: builder.append(StringUtils.format("buffer.writeIntArray({})", objectStr)).append(LS); break; @@ -239,6 +260,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}.writeIntBoxArray($1, {});", EnhanceUtils.byteBufUtils, objectStr)); break; + case Rust: + builder.append(StringUtils.format("buffer.writeIntArray(&{});", objectStr)).append(LS); + break; case Kotlin, Scala, GdScript, Python: builder.append(StringUtils.format("buffer.writeIntArray({})", objectStr)).append(LS); break; @@ -266,6 +290,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}.writeLongArray($1, {});", EnhanceUtils.byteBufUtils, objectStr)); break; + case Rust: + builder.append(StringUtils.format("buffer.writeLongArray(&{});", objectStr)).append(LS); + break; case Kotlin, Scala, GdScript, Python: builder.append(StringUtils.format("buffer.writeLongArray({})", objectStr)).append(LS); break; @@ -293,6 +320,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}.writeLongBoxArray($1, {});", EnhanceUtils.byteBufUtils, objectStr)); break; + case Rust: + builder.append(StringUtils.format("buffer.writeLongArray(&{});", objectStr)).append(LS); + break; case Kotlin, Scala, GdScript, Python: builder.append(StringUtils.format("buffer.writeLongArray({})", objectStr)).append(LS); break; @@ -320,6 +350,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}.writeFloatArray($1, {});", EnhanceUtils.byteBufUtils, objectStr)); break; + case Rust: + builder.append(StringUtils.format("buffer.writeFloatArray(&{});", objectStr)).append(LS); + break; case Kotlin, Scala, GdScript, Python: builder.append(StringUtils.format("buffer.writeFloatArray({})", objectStr)).append(LS); break; @@ -347,6 +380,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}.writeFloatBoxArray($1, {});", EnhanceUtils.byteBufUtils, objectStr)); break; + case Rust: + builder.append(StringUtils.format("buffer.writeFloatArray(&{});", objectStr)).append(LS); + break; case Kotlin, Scala, GdScript, Python: builder.append(StringUtils.format("buffer.writeFloatArray({})", objectStr)).append(LS); break; @@ -374,6 +410,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}.writeDoubleArray($1, {});", EnhanceUtils.byteBufUtils, objectStr)); break; + case Rust: + builder.append(StringUtils.format("buffer.writeDoubleArray(&{});", objectStr)).append(LS); + break; case Kotlin, Scala, GdScript, Python: builder.append(StringUtils.format("buffer.writeDoubleArray({})", objectStr)).append(LS); break; @@ -401,6 +440,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}.writeDoubleBoxArray($1, {});", EnhanceUtils.byteBufUtils, objectStr)); break; + case Rust: + builder.append(StringUtils.format("buffer.writeDoubleArray(&{});", objectStr)).append(LS); + break; case Kotlin, Scala, GdScript, Python: builder.append(StringUtils.format("buffer.writeDoubleArray({})", objectStr)).append(LS); break; @@ -428,6 +470,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}.writeStringArray($1, {});", EnhanceUtils.byteBufUtils, objectStr)); break; + case Rust: + builder.append(StringUtils.format("buffer.writeStringArray(&{});", objectStr)).append(LS); + break; case Kotlin, Scala, GdScript, Python: builder.append(StringUtils.format("buffer.writeStringArray({})", objectStr)).append(LS); break; @@ -477,7 +522,7 @@ public class CutDownArraySerializer implements ICutDownSerializer { case JavaScript, EcmaScript, TypeScript: builder.append(StringUtils.format("buffer.writePacketArray({}, {});", objectStr, protocolId)).append(LS); break; - case Golang, Protobuf, Java, Kotlin, Scala: + case Rust, Golang, Protobuf, Java, Kotlin, Scala: default: flag = false; } @@ -503,6 +548,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}[] {} = {}.readBoolArray($1);", arrayName, array, EnhanceUtils.byteBufUtils)); break; + case Rust: + builder.append(StringUtils.format("let {} = buffer.readBoolArray();", array)).append(LS); + break; case GdScript: builder.append(StringUtils.format("var {} = buffer.readBoolArray()", array)).append(LS); break; @@ -546,6 +594,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}[] {} = {}.readBoolBoxArray($1);", arrayName, array, EnhanceUtils.byteBufUtils)); break; + case Rust: + builder.append(StringUtils.format("let {} = buffer.readBoolArray();", array)).append(LS); + break; case GdScript: builder.append(StringUtils.format("var {} = buffer.readBoolArray()", array)).append(LS); break; @@ -586,6 +637,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}[] {} = {}.readByteArray($1);", arrayName, array, EnhanceUtils.byteBufUtils)); break; + case Rust: + builder.append(StringUtils.format("let {} = buffer.readByteArray();", array)).append(LS); + break; case GdScript: builder.append(StringUtils.format("var {} = buffer.readByteArray()", array)).append(LS); break; @@ -629,6 +683,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}[] {} = {}.readByteBoxArray($1);", arrayName, array, EnhanceUtils.byteBufUtils)); break; + case Rust: + builder.append(StringUtils.format("let {} = buffer.readByteArray();", array)).append(LS); + break; case GdScript: builder.append(StringUtils.format("var {} = buffer.readByteArray()", array)).append(LS); break; @@ -669,6 +726,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}[] {} = {}.readShortArray($1);", arrayName, array, EnhanceUtils.byteBufUtils)); break; + case Rust: + builder.append(StringUtils.format("let {} = buffer.readShortArray();", array)).append(LS); + break; case GdScript: builder.append(StringUtils.format("var {} = buffer.readShortArray()", array)).append(LS); break; @@ -712,6 +772,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}[] {} = {}.readShortBoxArray($1);", arrayName, array, EnhanceUtils.byteBufUtils)); break; + case Rust: + builder.append(StringUtils.format("let {} = buffer.readShortArray();", array)).append(LS); + break; case GdScript: builder.append(StringUtils.format("var {} = buffer.readShortArray()", array)).append(LS); break; @@ -752,6 +815,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}[] {} = {}.readIntArray($1);", arrayName, array, EnhanceUtils.byteBufUtils)); break; + case Rust: + builder.append(StringUtils.format("let {} = buffer.readIntArray();", array)).append(LS); + break; case GdScript: builder.append(StringUtils.format("var {} = buffer.readIntArray()", array)).append(LS); break; @@ -795,6 +861,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}[] {} = {}.readIntBoxArray($1);", arrayName, array, EnhanceUtils.byteBufUtils)); break; + case Rust: + builder.append(StringUtils.format("let {} = buffer.readIntArray();", array)).append(LS); + break; case GdScript: builder.append(StringUtils.format("var {} = buffer.readIntArray()", array)).append(LS); break; @@ -835,6 +904,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}[] {} = {}.readLongArray($1);", arrayName, array, EnhanceUtils.byteBufUtils)); break; + case Rust: + builder.append(StringUtils.format("let {} = buffer.readLongArray();", array)).append(LS); + break; case GdScript: builder.append(StringUtils.format("var {} = buffer.readLongArray()", array)).append(LS); break; @@ -878,6 +950,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}[] {} = {}.readLongBoxArray($1);", arrayName, array, EnhanceUtils.byteBufUtils)); break; + case Rust: + builder.append(StringUtils.format("let {} = buffer.readLongArray();", array)).append(LS); + break; case GdScript: builder.append(StringUtils.format("var {} = buffer.readLongArray()", array)).append(LS); break; @@ -918,6 +993,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}[] {} = {}.readFloatArray($1);", arrayName, array, EnhanceUtils.byteBufUtils)); break; + case Rust: + builder.append(StringUtils.format("let {} = buffer.readFloatArray();", array)).append(LS); + break; case GdScript: builder.append(StringUtils.format("var {} = buffer.readFloatArray()", array)).append(LS); break; @@ -961,6 +1039,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}[] {} = {}.readFloatBoxArray($1);", arrayName, array, EnhanceUtils.byteBufUtils)); break; + case Rust: + builder.append(StringUtils.format("let {} = buffer.readFloatArray();", array)).append(LS); + break; case GdScript: builder.append(StringUtils.format("var {} = buffer.readFloatArray()", array)).append(LS); break; @@ -1001,6 +1082,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}[] {} = {}.readDoubleArray($1);", arrayName, array, EnhanceUtils.byteBufUtils)); break; + case Rust: + builder.append(StringUtils.format("let {} = buffer.readDoubleArray();", array)).append(LS); + break; case GdScript: builder.append(StringUtils.format("var {} = buffer.readDoubleArray()", array)).append(LS); break; @@ -1044,6 +1128,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}[] {} = {}.readDoubleBoxArray($1);", arrayName, array, EnhanceUtils.byteBufUtils)); break; + case Rust: + builder.append(StringUtils.format("let {} = buffer.readDoubleArray();", array)).append(LS); + break; case GdScript: builder.append(StringUtils.format("var {} = buffer.readDoubleArray()", array)).append(LS); break; @@ -1084,6 +1171,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}[] {} = {}.readStringArray($1);", arrayName, array, EnhanceUtils.byteBufUtils)); break; + case Rust: + builder.append(StringUtils.format("let {} = buffer.readStringArray();", array)).append(LS); + break; case GdScript: builder.append(StringUtils.format("var {} = buffer.readStringArray()", array)).append(LS); break; @@ -1150,7 +1240,7 @@ public class CutDownArraySerializer implements ICutDownSerializer { case JavaScript, EcmaScript, TypeScript: builder.append(StringUtils.format("const {} = buffer.readPacketArray({});", array, protocolId)).append(LS); break; - case Golang, Java, Kotlin, Scala, Protobuf, Enhance: + case Rust, Golang, Java, Kotlin, Scala, Protobuf, Enhance: default: flag = false; } diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownListSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownListSerializer.java index 81f3426a..1b5073fa 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownListSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownListSerializer.java @@ -49,6 +49,9 @@ public class CutDownListSerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}.writeBoolList($1, (List){});", EnhanceUtils.byteBufUtils, objectStr)); break; + case Rust: + builder.append(StringUtils.format("buffer.writeBoolArray(&{});", objectStr)).append(LS); + break; case GdScript, Python: builder.append(StringUtils.format("buffer.writeBoolArray({})", objectStr)).append(LS); break; @@ -79,6 +82,9 @@ public class CutDownListSerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}.writeByteList($1, (List){});", EnhanceUtils.byteBufUtils, objectStr)); break; + case Rust: + builder.append(StringUtils.format("buffer.writeByteArray(&{});", objectStr)).append(LS); + break; case GdScript, Python: builder.append(StringUtils.format("buffer.writeByteArray({})", objectStr)).append(LS); break; @@ -110,6 +116,9 @@ public class CutDownListSerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}.writeShortList($1, (List){});", EnhanceUtils.byteBufUtils, objectStr)); break; + case Rust: + builder.append(StringUtils.format("buffer.writeShortArray(&{});", objectStr)).append(LS); + break; case GdScript, Python: builder.append(StringUtils.format("buffer.writeShortArray({})", objectStr)).append(LS); break; @@ -140,6 +149,9 @@ public class CutDownListSerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}.writeIntList($1, (List){});", EnhanceUtils.byteBufUtils, objectStr)); break; + case Rust: + builder.append(StringUtils.format("buffer.writeIntArray(&{});", objectStr)).append(LS); + break; case GdScript, Python: builder.append(StringUtils.format("buffer.writeIntArray({})", objectStr)).append(LS); break; @@ -170,6 +182,9 @@ public class CutDownListSerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}.writeLongList($1, (List){});", EnhanceUtils.byteBufUtils, objectStr)); break; + case Rust: + builder.append(StringUtils.format("buffer.writeLongArray(&{});", objectStr)).append(LS); + break; case GdScript, Python: builder.append(StringUtils.format("buffer.writeLongArray({})", objectStr)).append(LS); break; @@ -201,6 +216,9 @@ public class CutDownListSerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}.writeFloatList($1, (List){});", EnhanceUtils.byteBufUtils, objectStr)); break; + case Rust: + builder.append(StringUtils.format("buffer.writeFloatArray(&{});", objectStr)).append(LS); + break; case GdScript, Python: builder.append(StringUtils.format("buffer.writeFloatArray({})", objectStr)).append(LS); break; @@ -232,6 +250,9 @@ public class CutDownListSerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}.writeDoubleList($1, (List){});", EnhanceUtils.byteBufUtils, objectStr)); break; + case Rust: + builder.append(StringUtils.format("buffer.writeDoubleArray(&{});", objectStr)).append(LS); + break; case GdScript, Python: builder.append(StringUtils.format("buffer.writeDoubleArray({})", objectStr)).append(LS); break; @@ -263,6 +284,9 @@ public class CutDownListSerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("{}.writeStringList($1, (List){});", EnhanceUtils.byteBufUtils, objectStr)); break; + case Rust: + builder.append(StringUtils.format("buffer.writeStringArray(&{});", objectStr)).append(LS); + break; case GdScript, Python: builder.append(StringUtils.format("buffer.writeStringArray({})", objectStr)).append(LS); break; @@ -317,7 +341,7 @@ public class CutDownListSerializer implements ICutDownSerializer { case Kotlin, Scala: builder.append(StringUtils.format("buffer.writePacketList({}, {})", objectStr, protocolId)).append(LS); break; - case Golang, Protobuf: + case Rust, Golang, Protobuf: default: flag = false; } @@ -342,6 +366,9 @@ public class CutDownListSerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("List {} = {}.readBoolList($1);", list, EnhanceUtils.byteBufUtils)); break; + case Rust: + builder.append(StringUtils.format("let {} = buffer.readBoolArray();", list)).append(LS); + break; case GdScript: builder.append(StringUtils.format("var {} = buffer.readBoolArray()", list)).append(LS); break; @@ -385,6 +412,9 @@ public class CutDownListSerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("List {} = {}.readByteList($1);", list, EnhanceUtils.byteBufUtils)); break; + case Rust: + builder.append(StringUtils.format("let {} = buffer.readByteArray();", list)).append(LS); + break; case GdScript: builder.append(StringUtils.format("var {} = buffer.readByteArray()", list)).append(LS); break; @@ -428,6 +458,9 @@ public class CutDownListSerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("List {} = {}.readShortList($1);", list, EnhanceUtils.byteBufUtils)); break; + case Rust: + builder.append(StringUtils.format("let {} = buffer.readShortArray();", list)).append(LS); + break; case GdScript: builder.append(StringUtils.format("var {} = buffer.readShortArray()", list)).append(LS); break; @@ -471,6 +504,9 @@ public class CutDownListSerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("List {} = {}.readIntList($1);", list, EnhanceUtils.byteBufUtils)); break; + case Rust: + builder.append(StringUtils.format("let {} = buffer.readIntArray();", list)).append(LS); + break; case GdScript: builder.append(StringUtils.format("var {} = buffer.readIntArray()", list)).append(LS); break; @@ -514,6 +550,9 @@ public class CutDownListSerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("List {} = {}.readLongList($1);", list, EnhanceUtils.byteBufUtils)); break; + case Rust: + builder.append(StringUtils.format("let {} = buffer.readLongArray();", list)).append(LS); + break; case GdScript: builder.append(StringUtils.format("var {} = buffer.readLongArray()", list)).append(LS); break; @@ -557,6 +596,9 @@ public class CutDownListSerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("List {} = {}.readFloatList($1);", list, EnhanceUtils.byteBufUtils)); break; + case Rust: + builder.append(StringUtils.format("let {} = buffer.readFloatArray();", list)).append(LS); + break; case GdScript: builder.append(StringUtils.format("var {} = buffer.readFloatArray()", list)).append(LS); break; @@ -600,6 +642,9 @@ public class CutDownListSerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("List {} = {}.readDoubleList($1);", list, EnhanceUtils.byteBufUtils)); break; + case Rust: + builder.append(StringUtils.format("let {} = buffer.readDoubleArray();", list)).append(LS); + break; case GdScript: builder.append(StringUtils.format("var {} = buffer.readDoubleArray()", list)).append(LS); break; @@ -643,6 +688,9 @@ public class CutDownListSerializer implements ICutDownSerializer { case Enhance: builder.append(StringUtils.format("List {} = {}.readStringList($1);", list, EnhanceUtils.byteBufUtils)); break; + case Rust: + builder.append(StringUtils.format("let {} = buffer.readStringArray();", list)).append(LS); + break; case GdScript: builder.append(StringUtils.format("var {} = buffer.readStringArray()", list)).append(LS); break; @@ -720,7 +768,7 @@ public class CutDownListSerializer implements ICutDownSerializer { case JavaScript, EcmaScript, TypeScript: builder.append(StringUtils.format("const {} = buffer.readPacketList({});", list, protocolId)).append(LS); break; - case Golang, Protobuf: + case Rust, Golang, Protobuf: default: flag = false; } diff --git a/protocol/src/main/resources/rust/byte_buffer.rs b/protocol/src/main/resources/rust/byte_buffer.rs index 638a0f9f..2478a7c6 100644 --- a/protocol/src/main/resources/rust/byte_buffer.rs +++ b/protocol/src/main/resources/rust/byte_buffer.rs @@ -51,7 +51,7 @@ impl IByteBuffer for ByteBuffer { } } - fn compatibleRead(&mut self, beforeReadIndex: i32, length: i32) -> bool{ + fn compatibleRead(&mut self, beforeReadIndex: i32, length: i32) -> bool { return length != -1 && self.getReadOffset() < length + beforeReadIndex; } @@ -449,4 +449,180 @@ impl IByteBuffer for ByteBuffer { fn readPacket(&mut self, protocolId: i16) -> Box { return readNoProtocolId(self, protocolId); } -} + + fn writeBoolArray(&mut self, array: &Vec) { + if array.is_empty() { + self.writeInt(0); + } else { + self.writeInt(array.len() as i32); + for ele in array { + self.writeBool(*ele); + } + } + } + + fn readBoolArray(&mut self) -> Vec { + let mut array: Vec = Vec::new(); + let length = self.readInt(); + if length > 0 { + for _index in 0..length { + array.push(self.readBool()); + } + } + return array; + } + + fn writeByteArray(&mut self, array: &Vec) { + if array.is_empty() { + self.writeInt(0); + } else { + self.writeInt(array.len() as i32); + for ele in array { + self.writeByte(*ele); + } + } + } + + fn readByteArray(&mut self) -> Vec { + let mut array: Vec = Vec::new(); + let length = self.readInt(); + if length > 0 { + for _index in 0..length { + array.push(self.readByte()); + } + } + return array; + } + + fn writeShortArray(&mut self, array: &Vec) { + if array.is_empty() { + self.writeInt(0); + } else { + self.writeInt(array.len() as i32); + for ele in array { + self.writeShort(*ele); + } + } + } + + fn readShortArray(&mut self) -> Vec { + let mut array: Vec = Vec::new(); + let length = self.readInt(); + if length > 0 { + for _index in 0..length { + array.push(self.readShort()); + } + } + return array; + } + + fn writeIntArray(&mut self, array: &Vec) { + if array.is_empty() { + self.writeInt(0); + } else { + self.writeInt(array.len() as i32); + for ele in array { + self.writeInt(*ele); + } + } + } + + fn readIntArray(&mut self) -> Vec { + let mut array: Vec = Vec::new(); + let length = self.readInt(); + if length > 0 { + for _index in 0..length { + array.push(self.readInt()); + } + } + return array; + } + + fn writeLongArray(&mut self, array: &Vec) { + if array.is_empty() { + self.writeInt(0); + } else { + self.writeInt(array.len() as i32); + for ele in array { + self.writeLong(*ele); + } + } + } + + fn readLongArray(&mut self) -> Vec { + let mut array: Vec = Vec::new(); + let length = self.readInt(); + if length > 0 { + for _index in 0..length { + array.push(self.readLong()); + } + } + return array; + } + + fn writeFloatArray(&mut self, array: &Vec) { + if array.is_empty() { + self.writeInt(0); + } else { + self.writeInt(array.len() as i32); + for ele in array { + self.writeFloat(*ele); + } + } + } + + fn readFloatArray(&mut self) -> Vec { + let mut array: Vec = Vec::new(); + let length = self.readInt(); + if length > 0 { + for _index in 0..length { + array.push(self.readFloat()); + } + } + return array; + } + + fn writeDoubleArray(&mut self, array: &Vec) { + if array.is_empty() { + self.writeInt(0); + } else { + self.writeInt(array.len() as i32); + for ele in array { + self.writeDouble(*ele); + } + } + } + + fn readDoubleArray(&mut self) -> Vec { + let mut array: Vec = Vec::new(); + let length = self.readInt(); + if length > 0 { + for _index in 0..length { + array.push(self.readDouble()); + } + } + return array; + } + + fn writeStringArray(&mut self, array: &Vec) { + if array.is_empty() { + self.writeInt(0); + } else { + self.writeInt(array.len() as i32); + for ele in array { + self.writeString(String::from(ele)); + } + } + } + + fn readStringArray(&mut self) -> Vec { + let mut array: Vec = Vec::new(); + let length = self.readInt(); + if length > 0 { + for _index in 0..length { + array.push(self.readString()); + } + } + return array; + } +} \ No newline at end of file diff --git a/protocol/src/main/resources/rust/i_byte_buffer.rs b/protocol/src/main/resources/rust/i_byte_buffer.rs index b464edc6..45b80c60 100644 --- a/protocol/src/main/resources/rust/i_byte_buffer.rs +++ b/protocol/src/main/resources/rust/i_byte_buffer.rs @@ -52,4 +52,20 @@ pub trait IByteBuffer { fn readString(&mut self) -> String; fn writePacket(&mut self, packet: &dyn Any, protocolId: i16); fn readPacket(&mut self, protocolId: i16) -> Box; -} + fn writeBoolArray(&mut self, array: &Vec); + fn readBoolArray(&mut self) -> Vec; + fn writeByteArray(&mut self, array: &Vec); + fn readByteArray(&mut self) -> Vec; + fn writeShortArray(&mut self, array: &Vec); + fn readShortArray(&mut self) -> Vec; + fn writeIntArray(&mut self, array: &Vec); + fn readIntArray(&mut self) -> Vec; + fn writeLongArray(&mut self, array: &Vec); + fn readLongArray(&mut self) -> Vec; + fn writeFloatArray(&mut self, array: &Vec); + fn readFloatArray(&mut self) -> Vec; + fn writeDoubleArray(&mut self, array: &Vec); + fn readDoubleArray(&mut self) -> Vec; + fn writeStringArray(&mut self, array: &Vec); + fn readStringArray(&mut self) -> Vec; +} \ No newline at end of file