cbor_enhanced_derive_protocol 0.1.1

Derive macro implementation for cbor_enhanced
Documentation
#![feature(proc_macro_diagnostic)]
#![allow(clippy::let_and_return)]

extern crate proc_macro;
#[macro_use]
extern crate quote;
extern crate syn;

use proc_macro::TokenStream;

mod de;
mod ser;

#[derive(Clone)]
pub(crate) enum Either<A: Clone, B: Clone> {
    A(A),
    B(B),
}

impl<A: Clone, B: Clone> Either<A, B> {
    pub fn is_a(&self) -> bool {
        match self {
            Either::A(_) => true,
            _ => false,
        }
    }

    pub fn is_b(&self) -> bool {
        !self.is_a()
    }
}

#[proc_macro_derive(cbor_protocol, attributes(reserved, default, id))]
pub fn derive_protocol(item: TokenStream) -> TokenStream {
    let parsed: syn::DeriveInput = syn::parse(item).unwrap();

    let stream1 = ser::generate_serialize(&parsed);
    let stream2 = de::generate_deserialize(&parsed);
    let retval = quote! {
        #stream1

        #stream2
    };
    retval.into()
}