golang_type_name_macro/
lib.rs1extern 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}