1use quote::quote;
2use syn::{parse_macro_input, DeriveInput};
3
4use diagnostic::Diagnostic;
5
6mod code;
7mod diagnostic;
8mod diagnostic_arg;
9mod diagnostic_source;
10mod fmt;
11mod forward;
12mod help;
13mod label;
14mod related;
15mod severity;
16mod source_code;
17mod url;
18mod utils;
19
20#[proc_macro_derive(
21 Diagnostic,
22 attributes(diagnostic, source_code, label, related, help, diagnostic_source)
23)]
24pub fn derive_diagnostic(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
25 let input = parse_macro_input!(input as DeriveInput);
26 let cmd = match Diagnostic::from_derive_input(input) {
27 Ok(cmd) => cmd.gen(),
28 Err(err) => return err.to_compile_error().into(),
29 };
30 quote!(#cmd).into()
32}