summaryrefslogtreecommitdiff
path: root/vendor/miette-derive/src/diagnostic_arg.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/miette-derive/src/diagnostic_arg.rs')
-rw-r--r--vendor/miette-derive/src/diagnostic_arg.rs42
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",
+ ))
+ }
+ }
+}