Skip to main content

rust_toolkit_macros/
lib.rs

1//! Portable proc macros for trait-surface and effect-boundary contracts.
2
3#![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}