mirror of
https://codeberg.org/unspeaker/tengri.git
synced 2025-12-06 03:36:42 +01:00
69 lines
1.9 KiB
Rust
69 lines
1.9 KiB
Rust
#![feature(str_as_str)]
|
|
#![feature(box_patterns)]
|
|
extern crate proc_macro;
|
|
|
|
pub(crate) use std::collections::BTreeMap;
|
|
pub(crate) use std::cmp::Ordering;
|
|
pub(crate) use std::sync::Arc;
|
|
pub(crate) use proc_macro::TokenStream;
|
|
pub(crate) use proc_macro2::{
|
|
TokenStream as TokenStream2, Ident, Span, Punct, Group, Delimiter, Spacing::*
|
|
};
|
|
pub(crate) use syn::{
|
|
parse_macro_input, ImplItem, ImplItemFn, LitStr, Type,
|
|
ItemImpl, ReturnType, Signature, FnArg, Pat, PatType, PatIdent,
|
|
parse::{Parse, ParseStream, Result},
|
|
};
|
|
pub(crate) use quote::{quote, TokenStreamExt, ToTokens};
|
|
pub(crate) use heck::{AsKebabCase, AsUpperCamelCase};
|
|
|
|
mod proc_view;
|
|
mod proc_expose;
|
|
mod proc_command;
|
|
|
|
#[proc_macro_attribute]
|
|
pub fn view (meta: TokenStream, item: TokenStream) -> TokenStream {
|
|
use self::proc_view::{ViewDef, ViewMeta, ViewImpl};
|
|
write(ViewDef(
|
|
parse_macro_input!(meta as ViewMeta),
|
|
parse_macro_input!(item as ViewImpl),
|
|
))
|
|
}
|
|
|
|
#[proc_macro_attribute]
|
|
pub fn expose (meta: TokenStream, item: TokenStream) -> TokenStream {
|
|
use self::proc_expose::{ExposeDef, ExposeMeta, ExposeImpl};
|
|
write(ExposeDef(
|
|
parse_macro_input!(meta as ExposeMeta),
|
|
parse_macro_input!(item as ExposeImpl),
|
|
))
|
|
}
|
|
|
|
#[proc_macro_attribute]
|
|
pub fn command (meta: TokenStream, item: TokenStream) -> TokenStream {
|
|
use self::proc_command::{CommandDef, CommandMeta, CommandImpl};
|
|
write(CommandDef(
|
|
parse_macro_input!(meta as CommandMeta),
|
|
parse_macro_input!(item as CommandImpl),
|
|
))
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|