diff options
Diffstat (limited to 'vendor/miette-derive/src/diagnostic_arg.rs')
-rw-r--r-- | vendor/miette-derive/src/diagnostic_arg.rs | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/vendor/miette-derive/src/diagnostic_arg.rs b/vendor/miette-derive/src/diagnostic_arg.rs new file mode 100644 index 0000000..bade6f0 --- /dev/null +++ b/vendor/miette-derive/src/diagnostic_arg.rs @@ -0,0 +1,42 @@ +use syn::parse::{Parse, ParseStream}; + +use crate::code::Code; +use crate::forward::Forward; +use crate::help::Help; +use crate::severity::Severity; +use crate::url::Url; + +pub enum DiagnosticArg { + Transparent, + Code(Code), + Severity(Severity), + Help(Help), + Url(Url), + Forward(Forward), +} + +impl Parse for DiagnosticArg { + fn parse(input: ParseStream) -> syn::Result<Self> { + let ident = input.fork().parse::<syn::Ident>()?; + if ident == "transparent" { + // consume the token + let _: syn::Ident = input.parse()?; + Ok(DiagnosticArg::Transparent) + } else if ident == "forward" { + Ok(DiagnosticArg::Forward(input.parse()?)) + } else if ident == "code" { + Ok(DiagnosticArg::Code(input.parse()?)) + } else if ident == "severity" { + Ok(DiagnosticArg::Severity(input.parse()?)) + } else if ident == "help" { + Ok(DiagnosticArg::Help(input.parse()?)) + } else if ident == "url" { + Ok(DiagnosticArg::Url(input.parse()?)) + } else { + Err(syn::Error::new( + ident.span(), + "Unrecognized diagnostic option", + )) + } + } +} |