1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
extern crate proc_macro;
use proc_macro::TokenStream;
use std::fs;
use std::str::FromStr;
use cargo_toml::Manifest;
#[proc_macro]
pub fn package_name(_input: TokenStream) -> TokenStream {
// let parsed = parse_macro_input!(input as DeriveInput);
let toml = fs::read("Cargo.toml").unwrap();
let manifest = Manifest::from_slice(&toml).unwrap();
let name = manifest.package.unwrap().name;
TokenStream::from_str(&format!("pub const PACKAGE_NAME: &str = \"{}\";", name)).unwrap()
}