warpshell-derive 0.1.0

Procmacro helpers for the warpshell library
Documentation
extern crate proc_macro;

use proc_macro::TokenStream;
use quote::quote;
use syn::{self, DeriveInput};

#[proc_macro_derive(GetCtrlChannel)]
pub fn derive_get_ctrl_channel(input: TokenStream) -> TokenStream {
    let ast = syn::parse(input).unwrap();
    impl_get_ctrl_channel(&ast)
}

#[proc_macro_derive(GetDmaChannel)]
pub fn derive_get_dma_channel(input: TokenStream) -> TokenStream {
    let ast = syn::parse(input).unwrap();
    impl_get_dma_channel(&ast)
}

fn impl_get_ctrl_channel(ast: &DeriveInput) -> TokenStream {
    let ty = &ast.ident;
    let generics = &ast.generics;
    let tokens = quote! {
        impl #generics GetCtrlChannel for #ty #generics {
            fn get_ctrl_channel(&self) -> &CtrlChannel {
                self.ctrl_channel
            }
        }
    };
    tokens.into()
}

fn impl_get_dma_channel(ast: &DeriveInput) -> TokenStream {
    let ty = &ast.ident;
    let generics = &ast.generics;
    let tokens = quote! {
        impl #generics GetDmaChannel for #ty #generics {
            fn get_dma_channel(&self) -> &DmaChannel {
                self.dma_channel
            }
        }
    };
    tokens.into()
}