miette_derive/
lib.rs

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    // panic!("{:#}", cmd.to_token_stream());
31    quote!(#cmd).into()
32}