cgp_macro/
lib.rs

1#![no_std]
2
3/*!
4   This crate provides the proc macros used for defining CGP components.
5*/
6
7extern crate proc_macro;
8
9use proc_macro::TokenStream;
10
11#[proc_macro_attribute]
12pub fn cgp_component(attr: TokenStream, item: TokenStream) -> TokenStream {
13    cgp_macro_lib::cgp_component(attr.into(), item.into())
14        .unwrap_or_else(syn::Error::into_compile_error)
15        .into()
16}
17
18#[proc_macro_attribute]
19pub fn cgp_provider(attr: TokenStream, item: TokenStream) -> TokenStream {
20    cgp_macro_lib::cgp_provider(attr.into(), item.into())
21        .unwrap_or_else(syn::Error::into_compile_error)
22        .into()
23}
24
25#[proc_macro_attribute]
26pub fn cgp_new_provider(attr: TokenStream, item: TokenStream) -> TokenStream {
27    cgp_macro_lib::cgp_new_provider(attr.into(), item.into())
28        .unwrap_or_else(syn::Error::into_compile_error)
29        .into()
30}
31
32#[proc_macro_attribute]
33pub fn cgp_getter(attr: TokenStream, item: TokenStream) -> TokenStream {
34    cgp_macro_lib::cgp_getter(attr.into(), item.into())
35        .unwrap_or_else(syn::Error::into_compile_error)
36        .into()
37}
38
39#[proc_macro_attribute]
40pub fn cgp_auto_getter(attr: TokenStream, item: TokenStream) -> TokenStream {
41    cgp_macro_lib::cgp_auto_getter(attr.into(), item.into())
42        .unwrap_or_else(syn::Error::into_compile_error)
43        .into()
44}
45
46#[proc_macro]
47pub fn delegate_components(body: TokenStream) -> TokenStream {
48    cgp_macro_lib::delegate_components(body.into())
49        .unwrap_or_else(syn::Error::into_compile_error)
50        .into()
51}
52
53#[proc_macro]
54pub fn check_components(body: TokenStream) -> TokenStream {
55    cgp_macro_lib::check_components(body.into())
56        .unwrap_or_else(syn::Error::into_compile_error)
57        .into()
58}
59
60#[proc_macro]
61pub fn delegate_and_check_components(body: TokenStream) -> TokenStream {
62    cgp_macro_lib::delegate_and_check_components(body.into())
63        .unwrap_or_else(syn::Error::into_compile_error)
64        .into()
65}
66
67#[proc_macro]
68pub fn cgp_preset(body: TokenStream) -> TokenStream {
69    cgp_macro_lib::define_preset(body.into())
70        .unwrap_or_else(syn::Error::into_compile_error)
71        .into()
72}
73
74#[proc_macro_attribute]
75pub fn cgp_type(attrs: TokenStream, body: TokenStream) -> TokenStream {
76    cgp_macro_lib::cgp_type(attrs.into(), body.into())
77        .unwrap_or_else(syn::Error::into_compile_error)
78        .into()
79}
80
81#[proc_macro_attribute]
82pub fn cgp_context(attr: TokenStream, item: TokenStream) -> TokenStream {
83    cgp_macro_lib::cgp_context(attr.into(), item.into())
84        .unwrap_or_else(syn::Error::into_compile_error)
85        .into()
86}
87
88#[proc_macro_attribute]
89pub fn blanket_trait(attr: TokenStream, item: TokenStream) -> TokenStream {
90    cgp_macro_lib::blanket_trait(attr.into(), item.into())
91        .unwrap_or_else(syn::Error::into_compile_error)
92        .into()
93}
94
95#[proc_macro_attribute]
96pub fn re_export_imports(attrs: TokenStream, body: TokenStream) -> TokenStream {
97    cgp_macro_lib::re_export_imports(attrs.into(), body.into())
98        .unwrap_or_else(syn::Error::into_compile_error)
99        .into()
100}
101
102#[proc_macro]
103pub fn replace_with(body: TokenStream) -> TokenStream {
104    cgp_macro_lib::replace_with(body.into())
105        .unwrap_or_else(syn::Error::into_compile_error)
106        .into()
107}
108
109#[proc_macro]
110pub fn symbol(body: TokenStream) -> TokenStream {
111    cgp_macro_lib::make_symbol(body.into()).into()
112}
113
114#[proc_macro]
115#[allow(non_snake_case)]
116pub fn Product(body: TokenStream) -> TokenStream {
117    cgp_macro_lib::make_product_type(body.into()).into()
118}
119
120#[proc_macro]
121#[allow(non_snake_case)]
122pub fn Sum(body: TokenStream) -> TokenStream {
123    cgp_macro_lib::make_sum_type(body.into()).into()
124}
125
126#[proc_macro]
127pub fn product(body: TokenStream) -> TokenStream {
128    cgp_macro_lib::make_product_expr(body.into()).into()
129}
130
131#[proc_macro_derive(HasField)]
132pub fn derive_fields(item: TokenStream) -> TokenStream {
133    cgp_macro_lib::derive_fields(item.into()).into()
134}
135
136#[proc_macro_derive(HasFields)]
137pub fn derive_has_fields(item: TokenStream) -> TokenStream {
138    cgp_macro_lib::derive_has_fields(item.into())
139        .unwrap_or_else(syn::Error::into_compile_error)
140        .into()
141}