Skip to main content

runx_parser/
error.rs

1use serde::{Deserialize, Serialize};
2use thiserror::Error;
3
4#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
5#[serde(rename_all = "snake_case")]
6pub enum ParseErrorKind {
7    InvalidYaml,
8    InvalidJson,
9    InvalidDocument,
10    UnsupportedScalar,
11}
12
13#[derive(Debug, Error, PartialEq, Eq)]
14pub enum ParseError {
15    #[error("{field}: YAML parse failed: {message}")]
16    InvalidYaml { field: String, message: String },
17    #[error("{field}: JSON parse failed: {message}")]
18    InvalidJson { field: String, message: String },
19    #[error("{field}: {message}")]
20    InvalidDocument { field: String, message: String },
21    #[error("{field}: scalar form is outside the parser parity subset: {literal}")]
22    UnsupportedScalar { field: String, literal: String },
23}
24
25impl ParseError {
26    #[must_use]
27    pub const fn kind(&self) -> ParseErrorKind {
28        match self {
29            Self::InvalidYaml { .. } => ParseErrorKind::InvalidYaml,
30            Self::InvalidJson { .. } => ParseErrorKind::InvalidJson,
31            Self::InvalidDocument { .. } => ParseErrorKind::InvalidDocument,
32            Self::UnsupportedScalar { .. } => ParseErrorKind::UnsupportedScalar,
33        }
34    }
35}
36
37#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
38#[serde(rename_all = "snake_case")]
39pub enum ValidationErrorKind {
40    MissingField,
41    InvalidField,
42}
43
44#[derive(Debug, Error, PartialEq, Eq)]
45pub enum ValidationError {
46    #[error("{field} is required.")]
47    MissingField { field: String },
48    #[error("{message}")]
49    InvalidField { field: String, message: String },
50}
51
52impl ValidationError {
53    #[must_use]
54    pub const fn kind(&self) -> ValidationErrorKind {
55        match self {
56            Self::MissingField { .. } => ValidationErrorKind::MissingField,
57            Self::InvalidField { .. } => ValidationErrorKind::InvalidField,
58        }
59    }
60}