use proc_macro::TokenStream;
use quote::quote;
use syn::{parse_macro_input, DeriveInput};
pub fn implementation(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as DeriveInput);
let ident = input.ident;
let expanded = quote! {
impl BinaryMessage for #ident {
fn from_binary_message(message: tokio_tungstenite::tungstenite::Message) -> Result<#ident, RglwApiError> {
return match message {
tokio_tungstenite::tungstenite::Message::Binary(bytes) => {
Ok(serde_json::from_slice(&bytes)?)
},
_=> {
Err(RglwApiError::from_message(RglwApiErrorCode::ParsingError, "Error parsing the message to a model"))
}
}
}
fn to_binary_message(self) -> Result<tokio_tungstenite::tungstenite::Message, RglwApiError> {
let result = serde_json::to_vec(&self)?;
return Ok(tokio_tungstenite::tungstenite::Message::binary(result));
}
}
};
TokenStream::from(expanded)
}