lamezip77_macros 0.0.1

proc macros for lamezip77
Documentation
extern crate proc_macro;

use proc_macro::TokenStream;
use quote::quote;
use syn::{
    parse::{Parse, ParseStream},
    parse_macro_input, Expr, Ident, Path, Token,
};

struct MacroInput {
    id: Ident,
    _comma1: Token![,],
    outp: Expr,
    _comma2: Option<Token![,]>,
    crate_path: Option<Path>,
}

impl Parse for MacroInput {
    fn parse(input: ParseStream) -> syn::Result<Self> {
        let id = input.parse()?;
        let _comma1 = input.parse()?;
        let outp = input.parse()?;
        let maybe_comma: Option<Token![,]> = input.parse()?;
        if maybe_comma.is_none() {
            Ok(Self {
                id,
                _comma1,
                outp,
                _comma2: None,
                crate_path: None,
            })
        } else {
            Ok(Self {
                id,
                _comma1,
                outp,
                _comma2: None,
                crate_path: Some(input.parse()?),
            })
        }
    }
}

#[proc_macro]
pub fn nintendo_lz_decompress_make(tokens: TokenStream) -> TokenStream {
    let input = parse_macro_input!(tokens as MacroInput);

    let ident = input.id;
    let outp = input.outp;
    let crate_ref = if let Some(crate_path) = input.crate_path {
        quote! { #crate_path }
    } else {
        quote! { ::lamezip77 }
    };

    quote! {
        let __lamezip77_hidden_inner_state = #crate_ref::StreamingDecompressInnerState::<4>::new();
        let __lamezip77_hidden_inner_future = ::core::pin::pin!(#crate_ref::nintendo_lz::decompress_impl(
            #outp,
            __lamezip77_hidden_inner_state.get_peeker::<1>(),
            __lamezip77_hidden_inner_state.get_peeker::<2>(),
            __lamezip77_hidden_inner_state.get_peeker::<4>(),
        ));
        let mut #ident = #crate_ref::nintendo_lz::Decompress::new(&__lamezip77_hidden_inner_state, __lamezip77_hidden_inner_future);
    }
    .into()
}

#[proc_macro]
pub fn fastlz_decompress_make(tokens: TokenStream) -> TokenStream {
    let input = parse_macro_input!(tokens as MacroInput);

    let ident = input.id;
    let outp = input.outp;
    let crate_ref = if let Some(crate_path) = input.crate_path {
        quote! { #crate_path }
    } else {
        quote! { ::lamezip77 }
    };

    quote! {
        let __lamezip77_hidden_inner_state = #crate_ref::StreamingDecompressInnerState::<2>::new();
        let __lamezip77_hidden_inner_future = ::core::pin::pin!(#crate_ref::fastlz::decompress_impl(
            #outp,
            __lamezip77_hidden_inner_state.get_peeker::<1>(),
            __lamezip77_hidden_inner_state.get_peeker::<2>(),
        ));
        let mut #ident = #crate_ref::fastlz::Decompress::new(&__lamezip77_hidden_inner_state, __lamezip77_hidden_inner_future);
    }
    .into()
}

#[proc_macro]
pub fn lz4_decompress_make(tokens: TokenStream) -> TokenStream {
    let input = parse_macro_input!(tokens as MacroInput);

    let ident = input.id;
    let outp = input.outp;
    let crate_ref = if let Some(crate_path) = input.crate_path {
        quote! { #crate_path }
    } else {
        quote! { ::lamezip77 }
    };

    quote! {
        let __lamezip77_hidden_inner_state = #crate_ref::StreamingDecompressInnerState::<2>::new();
        let __lamezip77_hidden_inner_future = ::core::pin::pin!(#crate_ref::lz4::decompress_impl(
            #outp,
            __lamezip77_hidden_inner_state.get_peeker::<1>(),
            __lamezip77_hidden_inner_state.get_peeker::<2>(),
        ));
        let mut #ident = #crate_ref::lz4::Decompress::new(&__lamezip77_hidden_inner_state, __lamezip77_hidden_inner_future);
    }
    .into()
}

#[proc_macro]
pub fn deflate_decompress_make(tokens: TokenStream) -> TokenStream {
    let input = parse_macro_input!(tokens as MacroInput);

    let ident = input.id;
    let outp = input.outp;
    let crate_ref = if let Some(crate_path) = input.crate_path {
        quote! { #crate_path }
    } else {
        quote! { ::lamezip77 }
    };

    quote! {
        let __lamezip77_hidden_inner_state = #crate_ref::StreamingDecompressInnerState::<2>::new();
        let __lamezip77_hidden_inner_future = ::core::pin::pin!(#crate_ref::deflate::decompress_impl(
            #outp,
            __lamezip77_hidden_inner_state.get_peeker::<1>(),
            __lamezip77_hidden_inner_state.get_peeker::<2>(),
        ));
        let mut #ident = #crate_ref::deflate::Decompress::new(&__lamezip77_hidden_inner_state, __lamezip77_hidden_inner_future);
    }
    .into()
}