qubit-macros 1.0.0-beta.0

Macros to accompany `qubit`.
Documentation
use proc_macro2::TokenStream;
use quote::quote;

use super::lower::Ir;

pub fn codegen(ir: Ir) -> TokenStream {
    let Ir {
        name,
        kind,
        rpc_name,
        param_names,
        handler,
    } = ir;

    quote! {
        #handler

        const _: () = {
            #[::qubit::__private::linkme::distributed_slice(::qubit::__private::HANDLER_DEFINITIONS)]
            #[linkme(crate = ::qubit::__private::linkme)]
            static HANDLER_DEFINITION: fn() -> (::core::any::TypeId, ::qubit::__private::HandlerMeta) = || (
                ::core::any::Any::type_id(&#name),
                ::qubit::__private::HandlerMeta {
                    kind: #kind,
                    name: #rpc_name,
                    param_names: &[#(#param_names),*]
                }
            );
        };
    }
}