#![recursion_limit = "128"]
#![doc(html_playground_url = "https://play.rust-lang.org/")]
extern crate proc_macro;
#[macro_use]
extern crate quote;
extern crate syn;
use proc_macro::TokenStream;
use quote::ToTokens;
use syn::{Expr, parse_macro_input};
mod helpers;
mod derive_universalis;
use crate::derive_universalis::impl_universalis;
mod derive_labelled_universalis;
use crate::derive_labelled_universalis::impl_labelled_universalis;
#[proc_macro_derive(Universalis)]
pub fn derive_universalis(input: TokenStream) -> TokenStream {
let generated = impl_universalis(input);
generated.into_token_stream().into()
}
#[proc_macro_derive(NominataUniversalis)]
pub fn derive_nominata_universalis(input: TokenStream) -> TokenStream {
let generated = impl_labelled_universalis(input);
generated.into_token_stream().into()
}
#[proc_macro]
pub fn path(input: TokenStream) -> TokenStream {
let expr = parse_macro_input!(input as Expr);
let path_type = match helpers::build_path_type(expr) {
Ok(t) => t,
Err(e) => return e.to_compile_error().into(),
};
let ast = quote! {
{
let p: #path_type = ::ordofp_core::path::Path::new();
p
}
};
TokenStream::from(ast)
}
#[proc_macro]
pub fn path_type(input: TokenStream) -> TokenStream {
let expr = parse_macro_input!(input as Expr);
let path_type = match helpers::build_path_type(expr) {
Ok(t) => t,
Err(e) => return e.to_compile_error().into(),
};
let ast = quote! {
#path_type
};
TokenStream::from(ast)
}