nougat_proc_macros/
mod.rs

1//! Crate not intended for direct use.
2//! Use https:://docs.rs/nougat instead.
3// Templated by `cargo-generate` using https://github.com/danielhenrymantilla/proc-macro-template
4#![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, // Explicitly shadow it
28    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// Documentation located in the frontend crate.
41#[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// Documentation located in the frontend crate.
55#[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(), // .located_at(trait_name.span()),
73    )
74}