#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]
extern crate proc_macro;
use darling::FromDeriveInput;
use proc_macro::TokenStream;
use syn::{parse_macro_input, DeriveInput};
mod encode;
#[proc_macro_derive(Encode, attributes(insim))]
pub fn derive_encode(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as DeriveInput);
let receiver = match encode::Receiver::from_derive_input(&input) {
Ok(r) => r,
Err(e) => return TokenStream::from(e.write_errors()),
};
TokenStream::from(match receiver.encode() {
Ok(tokens) => tokens,
Err(e) => e.write_errors(),
})
}
#[proc_macro_derive(Decode, attributes(insim))]
pub fn derive_decode(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as DeriveInput);
let receiver = match encode::Receiver::from_derive_input(&input) {
Ok(r) => r,
Err(e) => return TokenStream::from(e.write_errors()),
};
TokenStream::from(match receiver.decode() {
Ok(tokens) => tokens,
Err(e) => e.write_errors(),
})
}