rglw_api_codegen 0.0.1

Rustyglware websocket api.
Documentation
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)
}