easy_macros_attributes_macros/
lib.rs1mod data;
2mod fields_get_attributes;
3mod fields_with_attributes;
4mod get_attributes;
5mod has_attributes;
6
7use always_context::always_context;
8use anyhow_result::anyhow_result;
9use helpers::find_crate_list;
10use proc_macro::TokenStream;
11use quote::quote;
12
13fn crate_missing_panic(crate_name: &str, for_macro: &str) -> ! {
14 panic!(
15 "Using {for_macro} requires `{crate_name}` (or `easy-macros` crate) to be present in dependencies! You can add it with `{crate_name} = \"*\"` in your Cargo.toml dependencies or with `cargo add {crate_name}` command."
16 );
17}
18
19fn root_macros_crate(required_by: &str) -> proc_macro2::TokenStream {
20 if let Some(found) = find_crate_list(&[
21 ("easy-macros", quote! {}),
22 ("easy-macros-attributes", quote! {}),
23 ("easy-macros-attributes-macros", quote! {}),
24 ]) {
25 found
26 } else {
27 crate_missing_panic("easy-macros-attributes", required_by);
28 }
29}
30
31fn context_crate(required_by: &str) -> proc_macro2::TokenStream {
32 if let Some(found) = find_crate_list(&[
33 ("easy-macros", quote! {}),
34 ("easy-macros-helpers", quote! {}),
35 ("easy-macros-attributes", quote! {::helpers}),
36 ]) {
37 found
38 } else {
39 crate_missing_panic("easy-macros-helpers", required_by);
40 }
41}
42
43#[always_context]
44#[proc_macro]
45#[anyhow_result]
46pub fn has_attributes(item: TokenStream) -> anyhow::Result<TokenStream> {
47 has_attributes::has_attributes(item)
48}
49
50#[always_context]
62#[proc_macro]
63#[anyhow_result]
64pub fn get_attributes(item: TokenStream) -> anyhow::Result<TokenStream> {
65 get_attributes::get_attributes(item)
66}
67
68#[always_context]
69#[proc_macro]
70#[anyhow_result]
71pub fn fields_with_attributes(item: TokenStream) -> anyhow::Result<TokenStream> {
72 fields_with_attributes::fields_with_attributes(item)
73}
74
75#[always_context]
76#[no_context]
77#[proc_macro]
78#[anyhow_result]
79#[doc(hidden)]
81pub fn fields_with_attributes_debug(item: TokenStream) -> anyhow::Result<TokenStream> {
82 let result = fields_with_attributes::fields_with_attributes(item)?;
83 panic!("{result}",);
84}
85
86#[always_context]
87#[proc_macro]
88#[anyhow_result]
89pub fn fields_get_attributes(item: TokenStream) -> anyhow::Result<TokenStream> {
90 fields_get_attributes::fields_get_attributes(item)
91}
92
93#[always_context]
94#[no_context]
95#[proc_macro]
96#[anyhow_result]
97#[doc(hidden)]
99pub fn fields_get_attributes_debug(item: TokenStream) -> anyhow::Result<TokenStream> {
100 let result = fields_get_attributes::fields_get_attributes(item)?;
101 panic!("{result}",);
102}