summaryrefslogtreecommitdiff
path: root/macros/src/lib.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2022-12-14 10:09:44 +0100
committerLaurenz <laurmaedje@gmail.com>2022-12-14 10:09:44 +0100
commit9ba4d2c134479aad876a0e2ac4cd1622a353109e (patch)
treea94e0e6ae53a1ba440e869fca26cc2ea0b179057 /macros/src/lib.rs
parent4c73456fc1f5df8ebb3a89d9db657c3c54624d66 (diff)
New macro setup
Diffstat (limited to 'macros/src/lib.rs')
-rw-r--r--macros/src/lib.rs25
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()
}