proc: simplify expose macro

This commit is contained in:
🪞👃🪞 2025-05-06 00:48:14 +03:00
parent cba23a005c
commit 7570aefcc2
5 changed files with 288 additions and 405 deletions

View file

@ -1,6 +1,6 @@
extern crate proc_macro;
pub(crate) use std::collections::{HashMap, BTreeMap};
pub(crate) use std::collections::{BTreeMap, BTreeSet};
pub(crate) use std::cmp::Ordering;
pub(crate) use proc_macro::TokenStream;
pub(crate) use proc_macro2::{
@ -10,22 +10,38 @@ pub(crate) use proc_macro2::{
pub(crate) use syn::{
parse, parse_macro_input, parse_quote as pq,
braced, bracketed, parenthesized, Token,
Arm, Expr, Attribute, Meta, MetaList, Path, PathSegment, PathArguments, ImplItem, LitStr, Type,
Arm, Expr, Attribute, Meta, MetaList, Path, PathSegment, PathArguments,
ImplItem, ImplItemFn, LitStr, Type, ItemImpl, ReturnType, Signature,
parse::{Parse, ParseStream, Result},
token::{PathSep, Brace},
punctuated::Punctuated,
};
pub(crate) use quote::{quote, TokenStreamExt, ToTokens};
pub(crate) use heck::AsKebabCase;
mod proc_view;
mod proc_expose;
#[proc_macro_attribute]
pub fn view (meta: TokenStream, item: TokenStream) -> TokenStream {
self::proc_view::view_impl(meta.into(), item.into()).into()
use self::proc_view::{ViewDef, ViewMeta, ViewImpl};
write_macro(ViewDef(
parse_macro_input!(meta as ViewMeta),
parse_macro_input!(item as ViewImpl),
))
}
#[proc_macro_attribute]
pub fn expose (meta: TokenStream, item: TokenStream) -> TokenStream {
self::proc_expose::expose_impl(meta.into(), item.into()).into()
use self::proc_expose::{ExposeDef, ExposeMeta, ExposeImpl};
write_macro(ExposeDef(
parse_macro_input!(meta as ExposeMeta),
parse_macro_input!(item as ExposeImpl),
))
}
fn write_macro <T: ToTokens> (t: T) -> TokenStream {
let mut out = TokenStream2::new();
t.to_tokens(&mut out);
out.into()
}