1use std::io;
2use thiserror::Error;
3
4#[cfg(doc)]
5use crate::reader::TokenReader;
6
7#[derive(Error, Debug)]
9pub enum ReadTokensError<E> {
10 #[error("input error")]
11 IoError { source: io::Error },
12 #[error("unexpected end of file")]
13 EndOfFile,
14 #[error("failed to parse line of tokens: \"{line}\"")]
15 ParseError { source: E, line: String },
16}
17
18#[derive(Error, Debug)]
20pub enum ReadLineError {
21 #[error("input error")]
22 IoError { source: io::Error },
23 #[error("unexpected end of file")]
24 EndOfFile,
25}
26
27#[derive(Error, Debug)]
34pub enum ParseTokenPatternError<E> {
35 #[error("failed to parse token")]
36 ParseError { source: E },
37 #[error("got more than {expected} tokens")]
38 TooManyTokens { expected: usize },
39 #[error("got {real} tokens, expected {expected}")]
40 TooFewTokens { real: usize, expected: usize },
41}
42
43impl<E> From<ReadLineError> for ReadTokensError<E> {
44 fn from(value: ReadLineError) -> Self {
45 match value {
46 ReadLineError::IoError { source } => ReadTokensError::IoError { source },
47 ReadLineError::EndOfFile => ReadTokensError::EndOfFile,
48 }
49 }
50}