mirror of https://github.com/zkat/miette.git
43 lines
1.2 KiB
Rust
43 lines
1.2 KiB
Rust
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",
|
|
))
|
|
}
|
|
}
|
|
}
|