diff options
| author | Laurenz <laurmaedje@gmail.com> | 2022-12-14 10:09:44 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2022-12-14 10:09:44 +0100 |
| commit | 9ba4d2c134479aad876a0e2ac4cd1622a353109e (patch) | |
| tree | a94e0e6ae53a1ba440e869fca26cc2ea0b179057 /macros/src/lib.rs | |
| parent | 4c73456fc1f5df8ebb3a89d9db657c3c54624d66 (diff) | |
New macro setup
Diffstat (limited to 'macros/src/lib.rs')
| -rw-r--r-- | macros/src/lib.rs | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/macros/src/lib.rs b/macros/src/lib.rs index 699deee9..7f6a4a6c 100644 --- a/macros/src/lib.rs +++ b/macros/src/lib.rs @@ -13,6 +13,7 @@ macro_rules! bail { } mod capability; +mod func; mod node; use proc_macro::TokenStream as BoundaryStream; @@ -21,20 +22,34 @@ use quote::{quote, quote_spanned}; use syn::parse_quote; use syn::{Error, Ident, Result}; +/// Implement `FuncType` for a type or function. +#[proc_macro_attribute] +pub fn func(_: BoundaryStream, item: BoundaryStream) -> BoundaryStream { + let item = syn::parse_macro_input!(item as syn::Item); + func::func(item).unwrap_or_else(|err| err.to_compile_error()).into() +} + /// Implement `Node` for a struct. #[proc_macro_attribute] -pub fn node(stream: BoundaryStream, item: BoundaryStream) -> BoundaryStream { +pub fn node(_: BoundaryStream, item: BoundaryStream) -> BoundaryStream { let item = syn::parse_macro_input!(item as syn::ItemImpl); - node::expand(stream.into(), item) - .unwrap_or_else(|err| err.to_compile_error()) - .into() + node::node(item).unwrap_or_else(|err| err.to_compile_error()).into() } /// Implement `Capability` for a trait. #[proc_macro_attribute] pub fn capability(_: BoundaryStream, item: BoundaryStream) -> BoundaryStream { let item = syn::parse_macro_input!(item as syn::ItemTrait); - capability::expand(item) + capability::capability(item) + .unwrap_or_else(|err| err.to_compile_error()) + .into() +} + +/// Implement `Capable` for a type. +#[proc_macro_attribute] +pub fn capable(stream: BoundaryStream, item: BoundaryStream) -> BoundaryStream { + let item = syn::parse_macro_input!(item as syn::Item); + capability::capable(stream.into(), item) .unwrap_or_else(|err| err.to_compile_error()) .into() } |
