38 lines
1.1 KiB
Rust
38 lines
1.1 KiB
Rust
use {
|
|
crate::{
|
|
config::parser::{DataType, ParseResult, Parser, UnexpectedDataType},
|
|
toml::toml_span::{Span, SpannedExt},
|
|
},
|
|
jay_config::input::FallbackOutputMode,
|
|
thiserror::Error,
|
|
};
|
|
|
|
pub struct FallbackOutputModeParser;
|
|
|
|
#[derive(Debug, Error)]
|
|
pub enum FallbackOutputModeParserError {
|
|
#[error(transparent)]
|
|
DataType(#[from] UnexpectedDataType),
|
|
#[error("Unknown mode {0}")]
|
|
Unknown(String),
|
|
}
|
|
|
|
impl Parser for FallbackOutputModeParser {
|
|
type Value = FallbackOutputMode;
|
|
type Error = FallbackOutputModeParserError;
|
|
const EXPECTED: &'static [DataType] = &[DataType::String];
|
|
|
|
fn parse_string(&mut self, span: Span, string: &str) -> ParseResult<Self> {
|
|
use FallbackOutputMode::*;
|
|
let api = match string.to_ascii_lowercase().as_str() {
|
|
"cursor" => Cursor,
|
|
"focus" => Focus,
|
|
_ => {
|
|
return Err(
|
|
FallbackOutputModeParserError::Unknown(string.to_string()).spanned(span)
|
|
);
|
|
}
|
|
};
|
|
Ok(api)
|
|
}
|
|
}
|