cido_macros/
lib.rs

1mod codegen;
2mod impls;
3mod parse;
4
5pub(crate) use codegen as cido_codegen;
6pub(crate) use parse::err;
7
8/// Proc macro for implementing the `Cidomap` trait on a type
9#[proc_macro_attribute]
10pub fn cidomap(
11  args: proc_macro::TokenStream,
12  input: proc_macro::TokenStream,
13) -> proc_macro::TokenStream {
14  cido_codegen::cidomap::CidomapStruct::parse(args.into(), input.into())
15    .and_then(|c| cido_codegen::CodegenWrapper(c).codegen())
16    .unwrap_or_else(|e| e.into_compile_error())
17    .into()
18}
19
20/// Proc macro for implementing the `EventHandler` trait on a type
21#[proc_macro_attribute]
22pub fn event_handler(
23  args: proc_macro::TokenStream,
24  input: proc_macro::TokenStream,
25) -> proc_macro::TokenStream {
26  cido_codegen::event_handler::EventsEnum::parse(args.into(), input.into())
27    .and_then(|e| cido_codegen::event_handler::event_handler_codegen(&e))
28    .unwrap_or_else(|e| e.into_compile_error())
29    .into()
30}
31
32/// Proc macro for declaring an entity
33#[proc_macro_attribute]
34pub fn entity(
35  args: proc_macro::TokenStream,
36  input: proc_macro::TokenStream,
37) -> proc_macro::TokenStream {
38  cido_codegen::transformer::TransformerStruct::parse(
39    args.into(),
40    input.into(),
41    crate::parse::StructType::Entity,
42  )
43  .and_then(|t| cido_codegen::CodegenWrapper(t).codegen())
44  .unwrap_or_else(|e| e.into_compile_error())
45  .into()
46}
47
48/// Proc macro for declaring an event
49#[proc_macro_attribute]
50pub fn event(
51  args: proc_macro::TokenStream,
52  input: proc_macro::TokenStream,
53) -> proc_macro::TokenStream {
54  cido_codegen::transformer::TransformerStruct::parse(
55    args.into(),
56    input.into(),
57    crate::parse::StructType::Event,
58  )
59  .and_then(|t| cido_codegen::CodegenWrapper(t).codegen())
60  .unwrap_or_else(|e| e.into_compile_error())
61  .into()
62}
63
64#[proc_macro_derive(OrderBy, attributes(orderby))]
65pub fn orderby(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
66  cido_codegen::orderby::OrderBy::parse(input.into())
67    .and_then(|o| cido_codegen::CodegenWrapper(o).generate_order_by())
68    .unwrap_or_else(|e| e.into_compile_error())
69    .into()
70}
71
72#[doc(hidden)]
73#[proc_macro_attribute]
74pub fn _impls(
75  args: proc_macro::TokenStream,
76  input: proc_macro::TokenStream,
77) -> proc_macro::TokenStream {
78  impls::impls(args, input)
79}