:
Some checks are pending
/ build (push) Waiting to run

wip: proc: command (pt.3)
This commit is contained in:
🪞👃🪞 2025-05-07 14:36:14 +03:00
parent c56b08c24e
commit 751e01a41e
2 changed files with 172 additions and 61 deletions

View file

@ -1,3 +1,5 @@
#![feature(str_as_str)]
extern crate proc_macro;
pub(crate) use std::collections::{BTreeMap, BTreeSet};
@ -27,7 +29,7 @@ mod proc_command;
#[proc_macro_attribute]
pub fn view (meta: TokenStream, item: TokenStream) -> TokenStream {
use self::proc_view::{ViewDef, ViewMeta, ViewImpl};
write_macro(ViewDef(
write(ViewDef(
parse_macro_input!(meta as ViewMeta),
parse_macro_input!(item as ViewImpl),
))
@ -36,7 +38,7 @@ pub fn view (meta: TokenStream, item: TokenStream) -> TokenStream {
#[proc_macro_attribute]
pub fn expose (meta: TokenStream, item: TokenStream) -> TokenStream {
use self::proc_expose::{ExposeDef, ExposeMeta, ExposeImpl};
write_macro(ExposeDef(
write(ExposeDef(
parse_macro_input!(meta as ExposeMeta),
parse_macro_input!(item as ExposeImpl),
))
@ -45,14 +47,28 @@ pub fn expose (meta: TokenStream, item: TokenStream) -> TokenStream {
#[proc_macro_attribute]
pub fn command (meta: TokenStream, item: TokenStream) -> TokenStream {
use self::proc_command::{CommandDef, CommandMeta, CommandImpl};
write_macro(CommandDef(
write(CommandDef(
parse_macro_input!(meta as CommandMeta),
parse_macro_input!(item as CommandImpl),
))
}
fn write_macro <T: ToTokens> (t: T) -> TokenStream {
pub(crate) fn write <T: ToTokens> (t: T) -> TokenStream {
let mut out = TokenStream2::new();
t.to_tokens(&mut out);
out.into()
}
pub(crate) fn write_quote (quote: TokenStream2) -> TokenStream2 {
let mut out = TokenStream2::new();
for token in quote {
out.append(token);
}
out
}
pub(crate) fn write_quote_to (out: &mut TokenStream2, quote: TokenStream2) {
for token in quote {
out.append(token);
}
}