fix(specctra): return error when point fails to parse first f64

This commit is contained in:
Alain Emilia Anna Zscheile 2024-12-02 22:53:22 +01:00 committed by mikolaj
parent b8adfec817
commit da72118255
2 changed files with 7 additions and 3 deletions

View File

@ -35,7 +35,7 @@ pub struct ParseErrorContext {
pub struct InputToken { pub struct InputToken {
pub token: ListToken, pub token: ListToken,
context: (usize, usize), pub context: (usize, usize),
} }
impl InputToken { impl InputToken {

View File

@ -399,7 +399,9 @@ impl<R: std::io::BufRead> ReadDsn<R> for Vec<Point> {
loop { loop {
let input = tokenizer.consume_token()?; let input = tokenizer.consume_token()?;
if let ListToken::Leaf { value: ref x } = input.token { if let ListToken::Leaf { value: ref x } = input.token {
let x = x.parse::<f64>().unwrap(); let x = x
.parse::<f64>()
.map_err(|_| ParseError::Expected("f64").add_context(input.context))?;
let y = tokenizer.read_value::<f64>()?; let y = tokenizer.read_value::<f64>()?;
array.push(Point { x, y }); array.push(Point { x, y });
} else { } else {
@ -415,7 +417,9 @@ impl<R: std::io::BufRead> ReadDsn<R> for Option<Point> {
fn read_dsn(tokenizer: &mut ListTokenizer<R>) -> Result<Self, ParseErrorContext> { fn read_dsn(tokenizer: &mut ListTokenizer<R>) -> Result<Self, ParseErrorContext> {
let input = tokenizer.consume_token()?; let input = tokenizer.consume_token()?;
if let ListToken::Leaf { value: ref x } = input.token { if let ListToken::Leaf { value: ref x } = input.token {
let x = x.parse::<f64>().unwrap(); let x = x
.parse::<f64>()
.map_err(|_| ParseError::Expected("f64").add_context(input.context))?;
let y = tokenizer.read_value::<f64>()?; let y = tokenizer.read_value::<f64>()?;
Ok(Some(Point { x, y })) Ok(Some(Point { x, y }))
} else { } else {