diff options
Diffstat (limited to 'core/src/message_encoder.rs')
| -rw-r--r-- | core/src/message_encoder.rs | 46 |
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 |
