1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#[cfg(feature = "proc-macro2")]
pub use proc_macro2 as _proc_macro2_impl;
#[cfg(not(feature = "proc_macro2"))]
pub mod _proc_macro2_impl {}

/// creates a module with any name (by default `proc_macro`) that
/// re-exports either all of `proc_macro` or all of `proc_macro2` items.
/// 
/// should not be used in a `proc-macro` context if the `proc_macro2` feature is set
#[macro_export]
macro_rules! import {
    ($name:ident) => {
        mod $name {
            use $crate::_proc_macro2_impl::*;
            #[cfg(proc_macro)]
            extern crate proc_macro as _proc_macro_impl;
            pub use _proc_macro_impl::*;
        }
    };
    () => { import!(proc_macro) };
}