miette_derive/
diagnostic_arg.rs1use syn::parse::{Parse, ParseStream};
2
3use crate::code::Code;
4use crate::forward::Forward;
5use crate::help::Help;
6use crate::severity::Severity;
7use crate::url::Url;
8
9pub enum DiagnosticArg {
10 Transparent,
11 Code(Code),
12 Severity(Severity),
13 Help(Help),
14 Url(Url),
15 Forward(Forward),
16}
17
18impl Parse for DiagnosticArg {
19 fn parse(input: ParseStream) -> syn::Result<Self> {
20 let ident = input.fork().parse::<syn::Ident>()?;
21 if ident == "transparent" {
22 let _: syn::Ident = input.parse()?;
24 Ok(DiagnosticArg::Transparent)
25 } else if ident == "forward" {
26 Ok(DiagnosticArg::Forward(input.parse()?))
27 } else if ident == "code" {
28 Ok(DiagnosticArg::Code(input.parse()?))
29 } else if ident == "severity" {
30 Ok(DiagnosticArg::Severity(input.parse()?))
31 } else if ident == "help" {
32 Ok(DiagnosticArg::Help(input.parse()?))
33 } else if ident == "url" {
34 Ok(DiagnosticArg::Url(input.parse()?))
35 } else {
36 Err(syn::Error::new(
37 ident.span(),
38 "Unrecognized diagnostic option",
39 ))
40 }
41 }
42}