aboutsummaryrefslogtreecommitdiff
path: root/core/src/message_encoder.rs
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/message_encoder.rs')
-rw-r--r--core/src/message_encoder.rs46
1 files changed, 43 insertions, 3 deletions
diff --git a/core/src/message_encoder.rs b/core/src/message_encoder.rs
index cda7382..0ef7fc8 100644
--- a/core/src/message_encoder.rs
+++ b/core/src/message_encoder.rs
@@ -1,7 +1,47 @@
-use crate::messages::PlayerMessage;
+use crate::constants::{BINCODE_CONFIG, BINCODE_CONVERT_FAILED};
+use crate::messages::{ClientMessage, PlayerMessage, ServerCallbackMessage, ServerMessage};
+use std::fmt::Debug;
+use bincode::{Decode, Encode};
-impl PlayerMessage {
- pub fn encode (&self) {
+pub trait LazyMessageEncoder<Message: Encode + Decode<()>> {
+ fn err_result_decode () -> Message;
+ fn err_result_encode () -> Vec<u8> {
+ BINCODE_CONVERT_FAILED
+ }
+
+ fn encode (&self) -> Vec<u8> where Self : Encode {
+ bincode::encode_to_vec(self, BINCODE_CONFIG)
+ .unwrap_or_else(|_| Self::err_result_encode())
+ }
+
+ fn decode (encoded : Vec<u8>) -> Message {
+ match bincode::decode_from_slice(&encoded[..], BINCODE_CONFIG) {
+ Ok((decoded, _)) => decoded,
+ Err(_) => Self::err_result_decode()
+ }
+ }
+}
+
+impl LazyMessageEncoder<PlayerMessage> for PlayerMessage {
+ fn err_result_decode() -> PlayerMessage {
+ PlayerMessage::Error
+ }
+}
+
+impl LazyMessageEncoder<ServerMessage> for ServerMessage {
+ fn err_result_decode() -> ServerMessage {
+ ServerMessage::Error
+ }
+}
+
+impl LazyMessageEncoder<ClientMessage> for ClientMessage {
+ fn err_result_decode() -> ClientMessage {
+ ClientMessage::Error
+ }
+}
+impl LazyMessageEncoder<ServerCallbackMessage> for ServerCallbackMessage {
+ fn err_result_decode() -> ServerCallbackMessage {
+ ServerCallbackMessage::Error
}
} \ No newline at end of file