rust_toolkit_macros/
lib.rs1#![forbid(unsafe_code)]
4
5use proc_macro::TokenStream;
6use proc_macro2::Span;
7use syn::{parse_quote, Ident, Path};
8
9fn support_path() -> Path {
10 parse_quote!(::rust_toolkit_effects::__private)
11}
12
13fn marker_name() -> Ident {
14 Ident::new("__toolkit_handler_marker", Span::call_site())
15}
16
17#[proc_macro_attribute]
18pub fn purity(attr: TokenStream, item: TokenStream) -> TokenStream {
19 rust_toolkit_trait_contracts::expand_purity(attr.into(), item.into()).into()
20}
21
22#[proc_macro_attribute]
23pub fn effect_trait(attr: TokenStream, item: TokenStream) -> TokenStream {
24 rust_toolkit_trait_contracts::expand_effect_trait(
25 attr.into(),
26 item.into(),
27 support_path(),
28 marker_name(),
29 )
30 .into()
31}
32
33#[proc_macro_attribute]
34pub fn effect_handler(attr: TokenStream, item: TokenStream) -> TokenStream {
35 rust_toolkit_trait_contracts::expand_effect_handler(
36 attr.into(),
37 item.into(),
38 support_path(),
39 marker_name(),
40 )
41 .into()
42}