mod date; pub use date::Date; mod parser; pub use parser::parse_collection; use thiserror::Error; mod types; pub use types::*; #[derive(Debug)] pub enum Error { InvalidField, InvalidBoardSize, Incomplete, InvalidSgf(VerboseNomError), } #[derive(Debug)] pub struct VerboseNomError(nom::error::VerboseError); impl From> for VerboseNomError { fn from(err: nom::error::VerboseError<&str>) -> Self { VerboseNomError(nom::error::VerboseError { errors: err .errors .into_iter() .map(|err| (err.0.to_owned(), err.1)) .collect(), }) } } impl From>> for Error { fn from(err: nom::Err>) -> Self { match err { nom::Err::Incomplete(_) => Error::Incomplete, nom::Err::Error(e) => Error::InvalidSgf(VerboseNomError::from(e)), nom::Err::Failure(e) => Error::InvalidSgf(VerboseNomError::from(e)), } } } #[derive(Debug, PartialEq, Error)] pub enum ParseError { #[error("An unknown error was found")] NomError(nom::error::Error), } impl From> for ParseError { fn from(err: nom::error::Error<&str>) -> Self { Self::NomError(nom::error::Error { input: err.input.to_owned(), code: err.code, }) } } pub fn parse_sgf(_input: &str) -> Result, Error> { Ok(vec![Game::default()]) }