nougat_proc_macros/
mod.rs1#![allow(nonstandard_style, unused_imports)]
5
6use ::core::{
7 mem,
8 ops::Not as _,
9};
10use ::proc_macro::{
11 TokenStream,
12};
13use ::proc_macro2::{
14 Span,
15 TokenStream as TokenStream2,
16 TokenTree as TT,
17};
18use ::quote::{
19 format_ident,
20 quote,
21 quote_spanned,
22 ToTokens,
23};
24use ::syn::{*,
25 parse::{Parse, Parser, ParseStream},
26 punctuated::{Pair, Punctuated},
27 Result, spanned::Spanned,
29};
30
31#[path = "adju-gat-e.rs"]
32mod adjugate;
33
34#[path = "Gat-bang.rs"]
35mod Gat;
36
37use self::utils::*;
38mod utils;
39
40#[proc_macro_attribute] pub
42fn gat (
43 attrs: TokenStream,
44 input: TokenStream,
45) -> TokenStream
46{
47 unwrap("#[::nougat::gat]", {
48 #[path = "gat-attr/_mod.rs"]
49 mod implementation;
50 implementation::gat(attrs.into(), input.into())
51 })
52}
53
54#[proc_macro] pub
56fn Gat (
57 input: TokenStream,
58) -> TokenStream
59{
60 unwrap("::nougat::Gat!", {
61 parse(input).and_then(Gat::Gat::<Error>)
62 })
63}
64
65fn combine_trait_name_and_assoc_type (
66 trait_name: &'_ Ident,
67 assoc_type: &'_ Ident,
68) -> Ident
69{
70 Ident::new(
71 &format!("{}ඞ{}", trait_name, assoc_type),
72 assoc_type.span(), )
74}