cido-macros 0.2.0

Macros for generating code that enables easier interfacing with cido
Documentation
mod codegen;
mod impls;
mod parse;

pub(crate) use codegen as cido_codegen;
pub(crate) use parse::err;

/// Proc macro for implementing the `Cidomap` trait on a type
#[proc_macro_attribute]
pub fn cidomap(
  args: proc_macro::TokenStream,
  input: proc_macro::TokenStream,
) -> proc_macro::TokenStream {
  cido_codegen::cidomap::CidomapStruct::parse(args.into(), input.into())
    .and_then(|c| cido_codegen::CodegenWrapper(c).codegen())
    .unwrap_or_else(|e| e.into_compile_error())
    .into()
}

/// Proc macro for implementing the `EventHandler` trait on a type
#[proc_macro_attribute]
pub fn event_handler(
  args: proc_macro::TokenStream,
  input: proc_macro::TokenStream,
) -> proc_macro::TokenStream {
  cido_codegen::event_handler::EventsEnum::parse(args.into(), input.into())
    .and_then(|e| cido_codegen::event_handler::event_handler_codegen(&e))
    .unwrap_or_else(|e| e.into_compile_error())
    .into()
}

/// Proc macro for declaring an entity
#[proc_macro_attribute]
pub fn entity(
  args: proc_macro::TokenStream,
  input: proc_macro::TokenStream,
) -> proc_macro::TokenStream {
  cido_codegen::transformer::TransformerStruct::parse(
    args.into(),
    input.into(),
    crate::parse::StructType::Entity,
  )
  .and_then(|t| cido_codegen::CodegenWrapper(t).codegen())
  .unwrap_or_else(|e| e.into_compile_error())
  .into()
}

/// Proc macro for declaring an event
#[proc_macro_attribute]
pub fn event(
  args: proc_macro::TokenStream,
  input: proc_macro::TokenStream,
) -> proc_macro::TokenStream {
  cido_codegen::transformer::TransformerStruct::parse(
    args.into(),
    input.into(),
    crate::parse::StructType::Event,
  )
  .and_then(|t| cido_codegen::CodegenWrapper(t).codegen())
  .unwrap_or_else(|e| e.into_compile_error())
  .into()
}

#[proc_macro_derive(OrderBy, attributes(orderby))]
pub fn orderby(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
  cido_codegen::orderby::OrderBy::parse(input.into())
    .and_then(|o| cido_codegen::CodegenWrapper(o).generate_order_by())
    .unwrap_or_else(|e| e.into_compile_error())
    .into()
}

#[doc(hidden)]
#[proc_macro_attribute]
pub fn _impls(
  args: proc_macro::TokenStream,
  input: proc_macro::TokenStream,
) -> proc_macro::TokenStream {
  impls::impls(args, input)
}