use std::fmt;
use crate::lexical::JsonLexicalErrorReason;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum JsonSyntaxErrorReason {
UnexpectedEnd,
UnexpectedByte,
ExpectedColon,
ExpectedCommaOrArrayEnd,
ExpectedCommaOrObjectEnd,
ExpectedObjectKey,
InvalidEscape,
InvalidUnicodeEscape,
UnpairedSurrogate,
InvalidUtf8,
InvalidNumber,
IntegerOutOfRange,
FloatOutOfRange,
TrailingCharacters,
NestingOverflow,
}
impl From<JsonLexicalErrorReason> for JsonSyntaxErrorReason {
#[inline]
fn from(reason: JsonLexicalErrorReason) -> Self {
match reason {
JsonLexicalErrorReason::UnexpectedEnd => Self::UnexpectedEnd,
JsonLexicalErrorReason::UnexpectedByte => Self::UnexpectedByte,
JsonLexicalErrorReason::ExpectedColon => Self::ExpectedColon,
JsonLexicalErrorReason::ExpectedCommaOrArrayEnd => Self::ExpectedCommaOrArrayEnd,
JsonLexicalErrorReason::ExpectedCommaOrObjectEnd => Self::ExpectedCommaOrObjectEnd,
JsonLexicalErrorReason::ExpectedObjectKey => Self::ExpectedObjectKey,
JsonLexicalErrorReason::InvalidEscape => Self::InvalidEscape,
JsonLexicalErrorReason::InvalidUnicodeEscape => Self::InvalidUnicodeEscape,
JsonLexicalErrorReason::UnpairedSurrogate => Self::UnpairedSurrogate,
JsonLexicalErrorReason::InvalidUtf8 => Self::InvalidUtf8,
JsonLexicalErrorReason::InvalidNumber => Self::InvalidNumber,
JsonLexicalErrorReason::IntegerOutOfRange => Self::IntegerOutOfRange,
JsonLexicalErrorReason::FloatOutOfRange => Self::FloatOutOfRange,
JsonLexicalErrorReason::TrailingCharacters => Self::TrailingCharacters,
JsonLexicalErrorReason::NestingOverflow => Self::NestingOverflow,
}
}
}
impl fmt::Display for JsonSyntaxErrorReason {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::UnexpectedEnd => formatter.write_str("unexpected end of input"),
Self::UnexpectedByte => formatter.write_str("unexpected byte"),
Self::ExpectedColon => formatter.write_str("expected ':'"),
Self::ExpectedCommaOrArrayEnd => formatter.write_str("expected ',' or ']' in array"),
Self::ExpectedCommaOrObjectEnd => formatter.write_str("expected ',' or '}' in object"),
Self::ExpectedObjectKey => formatter.write_str("expected object key"),
Self::InvalidEscape => formatter.write_str("invalid string escape"),
Self::InvalidUnicodeEscape => formatter.write_str("invalid Unicode escape"),
Self::UnpairedSurrogate => formatter.write_str("unpaired Unicode surrogate"),
Self::InvalidUtf8 => formatter.write_str("invalid UTF-8"),
Self::InvalidNumber => formatter.write_str("invalid JSON number"),
Self::IntegerOutOfRange => formatter.write_str("JSON integer is outside the supported 64-bit range"),
Self::FloatOutOfRange => formatter.write_str("JSON number is outside the finite f64 range"),
Self::TrailingCharacters => formatter.write_str("trailing characters"),
Self::NestingOverflow => formatter.write_str("JSON nesting overflow"),
}
}
}