| use quote::quote; |
| use syn::{parse_macro_input, DeriveInput}; |
| |
| use diagnostic::Diagnostic; |
| |
| mod code; |
| mod diagnostic; |
| mod diagnostic_arg; |
| mod diagnostic_source; |
| mod fmt; |
| mod forward; |
| mod help; |
| mod label; |
| mod related; |
| mod severity; |
| mod source_code; |
| mod url; |
| mod utils; |
| |
| #[proc_macro_derive( |
| Diagnostic, |
| attributes(diagnostic, source_code, label, related, help, diagnostic_source) |
| )] |
| pub fn derive_diagnostic(input: proc_macro::TokenStream) -> proc_macro::TokenStream { |
| let input = parse_macro_input!(input as DeriveInput); |
| let cmd = match Diagnostic::from_derive_input(input) { |
| Ok(cmd) => cmd.gen(), |
| Err(err) => return err.to_compile_error().into(), |
| }; |
| // panic!("{:#}", cmd.to_token_stream()); |
| quote!(#cmd).into() |
| } |