golang_type_name_macro/
lib.rs

1extern crate proc_macro;
2
3use golang_type_name_core::{TypeName, TypeNameParseError};
4use quote::quote;
5use syn::{
6    parse::{Parse, ParseStream},
7    parse_macro_input, Error as SynError, LitStr,
8};
9
10struct GenTypeNameInput {
11    type_name: TypeName,
12}
13impl Parse for GenTypeNameInput {
14    fn parse(input: ParseStream) -> Result<Self, SynError> {
15        let type_name = input.parse::<LitStr>()?;
16
17        let type_name: TypeName = type_name
18            .value()
19            .parse()
20            .map_err(|err: TypeNameParseError| SynError::new_spanned(type_name, err.to_string()))?;
21
22        Ok(Self { type_name })
23    }
24}
25
26#[proc_macro]
27pub fn gen_type_name(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
28    let input = parse_macro_input!(input as GenTypeNameInput);
29
30    let type_name = input.type_name;
31
32    let output = quote!(#type_name);
33    output.into()
34}