Skip to content

Commit f862c33

Browse files
committed
Error → JsonSyntaxError
1 parent f8a7984 commit f862c33

File tree

1 file changed

+113
-104
lines changed

1 file changed

+113
-104
lines changed

src/lib.rs

Lines changed: 113 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ impl JsonFormat {
165165
/// # Errors
166166
///
167167
/// Returns `Err` if `s` does not meet the above requirements.
168-
pub fn comma<S: AsRef<str>>(mut self, s: S) -> Result<Self, Error> {
168+
pub fn comma<S: AsRef<str>>(mut self, s: S) -> Result<Self, JsonSyntaxError> {
169169
self.comma = validate_string(s, Some(','))?;
170170
Ok(self)
171171
}
@@ -179,7 +179,7 @@ impl JsonFormat {
179179
/// # Errors
180180
///
181181
/// Returns `Err` if `s` does not meet the above requirements.
182-
pub fn colon<S: AsRef<str>>(mut self, s: S) -> Result<Self, Error> {
182+
pub fn colon<S: AsRef<str>>(mut self, s: S) -> Result<Self, JsonSyntaxError> {
183183
self.colon = validate_string(s, Some(':'))?;
184184
Ok(self)
185185
}
@@ -196,7 +196,7 @@ impl JsonFormat {
196196
///
197197
/// Returns `Err` if `s` contains a string that contains any character
198198
/// other than those listed above.
199-
pub fn indent<S: AsRef<str>>(mut self, s: Option<S>) -> Result<Self, Error> {
199+
pub fn indent<S: AsRef<str>>(mut self, s: Option<S>) -> Result<Self, JsonSyntaxError> {
200200
self.indent = s.map(|s| validate_string(s, None)).transpose()?;
201201
Ok(self)
202202
}
@@ -478,7 +478,7 @@ pub type JsonFrmtr<'a> = internal::JsonFormatterBase<internal::JsonFmt<'a>>;
478478
/// Error returned when an invalid string is passed to certain [`JsonFormat`]
479479
/// methods.
480480
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
481-
pub enum Error {
481+
pub enum JsonSyntaxError {
482482
/// Returned when the given string contains an invalid/unexpected
483483
/// character. Contains the character in question.
484484
InvalidCharacter(char),
@@ -494,9 +494,9 @@ pub enum Error {
494494
MultipleSeparators(char),
495495
}
496496

497-
impl fmt::Display for Error {
497+
impl fmt::Display for JsonSyntaxError {
498498
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
499-
use Error::*;
499+
use JsonSyntaxError::*;
500500
match self {
501501
InvalidCharacter(c) => write!(f, "string contains unexpected character {c:?}"),
502502
MissingSeparator(c) => write!(f, "no occurrence of {c:?} found in string"),
@@ -505,26 +505,29 @@ impl fmt::Display for Error {
505505
}
506506
}
507507

508-
impl std::error::Error for Error {}
508+
impl std::error::Error for JsonSyntaxError {}
509509

510-
fn validate_string<S: AsRef<str>>(s: S, sep: Option<char>) -> Result<CompactString, Error> {
510+
fn validate_string<S: AsRef<str>>(
511+
s: S,
512+
sep: Option<char>,
513+
) -> Result<CompactString, JsonSyntaxError> {
511514
let s = s.as_ref();
512515
let mut seen_sep = false;
513516
for ch in s.chars() {
514517
match (sep, ch) {
515518
(Some(sep_), ch) if sep_ == ch => {
516519
if std::mem::replace(&mut seen_sep, true) {
517-
return Err(Error::MultipleSeparators(sep_));
520+
return Err(JsonSyntaxError::MultipleSeparators(sep_));
518521
}
519522
}
520523
// RFC 8259, section 2
521524
(_, ' ' | '\t' | '\n' | '\r') => (),
522-
(_, ch) => return Err(Error::InvalidCharacter(ch)),
525+
(_, ch) => return Err(JsonSyntaxError::InvalidCharacter(ch)),
523526
}
524527
}
525528
if let Some(sep_) = sep {
526529
if !seen_sep {
527-
return Err(Error::MissingSeparator(sep_));
530+
return Err(JsonSyntaxError::MissingSeparator(sep_));
528531
}
529532
}
530533
Ok(s.into())
@@ -543,52 +546,55 @@ mod tests {
543546
#[case("? ", Ok("? ".into()))]
544547
#[case(" ? ", Ok(" ? ".into()))]
545548
#[case(" \t?\r\n", Ok(" \t?\r\n".into()))]
546-
#[case("", Err(Error::MissingSeparator('?')))]
547-
#[case(" ", Err(Error::MissingSeparator('?')))]
548-
#[case("??", Err(Error::MultipleSeparators('?')))]
549-
#[case("? ?", Err(Error::MultipleSeparators('?')))]
550-
#[case("\x0C", Err(Error::InvalidCharacter('\x0C')))]
551-
#[case("\x0B", Err(Error::InvalidCharacter('\x0B')))]
552-
#[case("\u{A0}", Err(Error::InvalidCharacter('\u{A0}')))]
553-
#[case("\u{85}", Err(Error::InvalidCharacter('\u{85}')))]
554-
#[case("\u{1680}", Err(Error::InvalidCharacter('\u{1680}')))]
555-
#[case("\u{180E}", Err(Error::InvalidCharacter('\u{180E}')))]
556-
#[case("\u{2000}", Err(Error::InvalidCharacter('\u{2000}')))]
557-
#[case("\u{2001}", Err(Error::InvalidCharacter('\u{2001}')))]
558-
#[case("\u{2002}", Err(Error::InvalidCharacter('\u{2002}')))]
559-
#[case("\u{2003}", Err(Error::InvalidCharacter('\u{2003}')))]
560-
#[case("\u{2004}", Err(Error::InvalidCharacter('\u{2004}')))]
561-
#[case("\u{2005}", Err(Error::InvalidCharacter('\u{2005}')))]
562-
#[case("\u{2006}", Err(Error::InvalidCharacter('\u{2006}')))]
563-
#[case("\u{2007}", Err(Error::InvalidCharacter('\u{2007}')))]
564-
#[case("\u{2008}", Err(Error::InvalidCharacter('\u{2008}')))]
565-
#[case("\u{2009}", Err(Error::InvalidCharacter('\u{2009}')))]
566-
#[case("\u{200A}", Err(Error::InvalidCharacter('\u{200A}')))]
567-
#[case("\u{200B}", Err(Error::InvalidCharacter('\u{200B}')))]
568-
#[case("\u{200C}", Err(Error::InvalidCharacter('\u{200C}')))]
569-
#[case("\u{200D}", Err(Error::InvalidCharacter('\u{200D}')))]
570-
#[case("\u{2028}", Err(Error::InvalidCharacter('\u{2028}')))]
571-
#[case("\u{2029}", Err(Error::InvalidCharacter('\u{2029}')))]
572-
#[case("\u{202F}", Err(Error::InvalidCharacter('\u{202F}')))]
573-
#[case("\u{205F}", Err(Error::InvalidCharacter('\u{205F}')))]
574-
#[case("\u{2060}", Err(Error::InvalidCharacter('\u{2060}')))]
575-
#[case("\u{3000}", Err(Error::InvalidCharacter('\u{3000}')))]
576-
#[case("\u{FEFF}", Err(Error::InvalidCharacter('\u{FEFF}')))]
577-
#[case("\x0C?", Err(Error::InvalidCharacter('\x0C')))]
578-
#[case("?\x0C", Err(Error::InvalidCharacter('\x0C')))]
579-
#[case("?\x0C?", Err(Error::InvalidCharacter('\x0C')))]
580-
#[case("??\x0C", Err(Error::MultipleSeparators('?')))]
581-
#[case(".", Err(Error::InvalidCharacter('.')))]
582-
#[case(".?", Err(Error::InvalidCharacter('.')))]
583-
#[case("?.", Err(Error::InvalidCharacter('.')))]
584-
#[case("?.?", Err(Error::InvalidCharacter('.')))]
585-
#[case("??.", Err(Error::MultipleSeparators('?')))]
586-
#[case("☃", Err(Error::InvalidCharacter('☃')))]
587-
#[case("☃?", Err(Error::InvalidCharacter('☃')))]
588-
#[case("?☃", Err(Error::InvalidCharacter('☃')))]
589-
#[case("?☃?", Err(Error::InvalidCharacter('☃')))]
590-
#[case("??☃", Err(Error::MultipleSeparators('?')))]
591-
fn test_validate_string_sep(#[case] s: &str, #[case] r: Result<CompactString, Error>) {
549+
#[case("", Err(JsonSyntaxError::MissingSeparator('?')))]
550+
#[case(" ", Err(JsonSyntaxError::MissingSeparator('?')))]
551+
#[case("??", Err(JsonSyntaxError::MultipleSeparators('?')))]
552+
#[case("? ?", Err(JsonSyntaxError::MultipleSeparators('?')))]
553+
#[case("\x0C", Err(JsonSyntaxError::InvalidCharacter('\x0C')))]
554+
#[case("\x0B", Err(JsonSyntaxError::InvalidCharacter('\x0B')))]
555+
#[case("\u{A0}", Err(JsonSyntaxError::InvalidCharacter('\u{A0}')))]
556+
#[case("\u{85}", Err(JsonSyntaxError::InvalidCharacter('\u{85}')))]
557+
#[case("\u{1680}", Err(JsonSyntaxError::InvalidCharacter('\u{1680}')))]
558+
#[case("\u{180E}", Err(JsonSyntaxError::InvalidCharacter('\u{180E}')))]
559+
#[case("\u{2000}", Err(JsonSyntaxError::InvalidCharacter('\u{2000}')))]
560+
#[case("\u{2001}", Err(JsonSyntaxError::InvalidCharacter('\u{2001}')))]
561+
#[case("\u{2002}", Err(JsonSyntaxError::InvalidCharacter('\u{2002}')))]
562+
#[case("\u{2003}", Err(JsonSyntaxError::InvalidCharacter('\u{2003}')))]
563+
#[case("\u{2004}", Err(JsonSyntaxError::InvalidCharacter('\u{2004}')))]
564+
#[case("\u{2005}", Err(JsonSyntaxError::InvalidCharacter('\u{2005}')))]
565+
#[case("\u{2006}", Err(JsonSyntaxError::InvalidCharacter('\u{2006}')))]
566+
#[case("\u{2007}", Err(JsonSyntaxError::InvalidCharacter('\u{2007}')))]
567+
#[case("\u{2008}", Err(JsonSyntaxError::InvalidCharacter('\u{2008}')))]
568+
#[case("\u{2009}", Err(JsonSyntaxError::InvalidCharacter('\u{2009}')))]
569+
#[case("\u{200A}", Err(JsonSyntaxError::InvalidCharacter('\u{200A}')))]
570+
#[case("\u{200B}", Err(JsonSyntaxError::InvalidCharacter('\u{200B}')))]
571+
#[case("\u{200C}", Err(JsonSyntaxError::InvalidCharacter('\u{200C}')))]
572+
#[case("\u{200D}", Err(JsonSyntaxError::InvalidCharacter('\u{200D}')))]
573+
#[case("\u{2028}", Err(JsonSyntaxError::InvalidCharacter('\u{2028}')))]
574+
#[case("\u{2029}", Err(JsonSyntaxError::InvalidCharacter('\u{2029}')))]
575+
#[case("\u{202F}", Err(JsonSyntaxError::InvalidCharacter('\u{202F}')))]
576+
#[case("\u{205F}", Err(JsonSyntaxError::InvalidCharacter('\u{205F}')))]
577+
#[case("\u{2060}", Err(JsonSyntaxError::InvalidCharacter('\u{2060}')))]
578+
#[case("\u{3000}", Err(JsonSyntaxError::InvalidCharacter('\u{3000}')))]
579+
#[case("\u{FEFF}", Err(JsonSyntaxError::InvalidCharacter('\u{FEFF}')))]
580+
#[case("\x0C?", Err(JsonSyntaxError::InvalidCharacter('\x0C')))]
581+
#[case("?\x0C", Err(JsonSyntaxError::InvalidCharacter('\x0C')))]
582+
#[case("?\x0C?", Err(JsonSyntaxError::InvalidCharacter('\x0C')))]
583+
#[case("??\x0C", Err(JsonSyntaxError::MultipleSeparators('?')))]
584+
#[case(".", Err(JsonSyntaxError::InvalidCharacter('.')))]
585+
#[case(".?", Err(JsonSyntaxError::InvalidCharacter('.')))]
586+
#[case("?.", Err(JsonSyntaxError::InvalidCharacter('.')))]
587+
#[case("?.?", Err(JsonSyntaxError::InvalidCharacter('.')))]
588+
#[case("??.", Err(JsonSyntaxError::MultipleSeparators('?')))]
589+
#[case("☃", Err(JsonSyntaxError::InvalidCharacter('☃')))]
590+
#[case("☃?", Err(JsonSyntaxError::InvalidCharacter('☃')))]
591+
#[case("?☃", Err(JsonSyntaxError::InvalidCharacter('☃')))]
592+
#[case("?☃?", Err(JsonSyntaxError::InvalidCharacter('☃')))]
593+
#[case("??☃", Err(JsonSyntaxError::MultipleSeparators('?')))]
594+
fn test_validate_string_sep(
595+
#[case] s: &str,
596+
#[case] r: Result<CompactString, JsonSyntaxError>,
597+
) {
592598
assert_eq!(validate_string(s, Some('?')), r);
593599
}
594600

@@ -597,50 +603,53 @@ mod tests {
597603
#[case(" ", Ok(" ".into()))]
598604
#[case(" ", Ok(" ".into()))]
599605
#[case(" \t\r\n", Ok(" \t\r\n".into()))]
600-
#[case("?", Err(Error::InvalidCharacter('?')))]
601-
#[case(" ?", Err(Error::InvalidCharacter('?')))]
602-
#[case("? ", Err(Error::InvalidCharacter('?')))]
603-
#[case(" ? ", Err(Error::InvalidCharacter('?')))]
604-
#[case("??", Err(Error::InvalidCharacter('?')))]
605-
#[case("\x0C", Err(Error::InvalidCharacter('\x0C')))]
606-
#[case("\x0B", Err(Error::InvalidCharacter('\x0B')))]
607-
#[case("\u{A0}", Err(Error::InvalidCharacter('\u{A0}')))]
608-
#[case("\u{85}", Err(Error::InvalidCharacter('\u{85}')))]
609-
#[case("\u{1680}", Err(Error::InvalidCharacter('\u{1680}')))]
610-
#[case("\u{180E}", Err(Error::InvalidCharacter('\u{180E}')))]
611-
#[case("\u{2000}", Err(Error::InvalidCharacter('\u{2000}')))]
612-
#[case("\u{2001}", Err(Error::InvalidCharacter('\u{2001}')))]
613-
#[case("\u{2002}", Err(Error::InvalidCharacter('\u{2002}')))]
614-
#[case("\u{2003}", Err(Error::InvalidCharacter('\u{2003}')))]
615-
#[case("\u{2004}", Err(Error::InvalidCharacter('\u{2004}')))]
616-
#[case("\u{2005}", Err(Error::InvalidCharacter('\u{2005}')))]
617-
#[case("\u{2006}", Err(Error::InvalidCharacter('\u{2006}')))]
618-
#[case("\u{2007}", Err(Error::InvalidCharacter('\u{2007}')))]
619-
#[case("\u{2008}", Err(Error::InvalidCharacter('\u{2008}')))]
620-
#[case("\u{2009}", Err(Error::InvalidCharacter('\u{2009}')))]
621-
#[case("\u{200A}", Err(Error::InvalidCharacter('\u{200A}')))]
622-
#[case("\u{200B}", Err(Error::InvalidCharacter('\u{200B}')))]
623-
#[case("\u{200C}", Err(Error::InvalidCharacter('\u{200C}')))]
624-
#[case("\u{200D}", Err(Error::InvalidCharacter('\u{200D}')))]
625-
#[case("\u{2028}", Err(Error::InvalidCharacter('\u{2028}')))]
626-
#[case("\u{2029}", Err(Error::InvalidCharacter('\u{2029}')))]
627-
#[case("\u{202F}", Err(Error::InvalidCharacter('\u{202F}')))]
628-
#[case("\u{205F}", Err(Error::InvalidCharacter('\u{205F}')))]
629-
#[case("\u{2060}", Err(Error::InvalidCharacter('\u{2060}')))]
630-
#[case("\u{3000}", Err(Error::InvalidCharacter('\u{3000}')))]
631-
#[case("\u{FEFF}", Err(Error::InvalidCharacter('\u{FEFF}')))]
632-
#[case("\x0C ", Err(Error::InvalidCharacter('\x0C')))]
633-
#[case(" \x0C", Err(Error::InvalidCharacter('\x0C')))]
634-
#[case(" \x0C ", Err(Error::InvalidCharacter('\x0C')))]
635-
#[case(".", Err(Error::InvalidCharacter('.')))]
636-
#[case(". ", Err(Error::InvalidCharacter('.')))]
637-
#[case(" .", Err(Error::InvalidCharacter('.')))]
638-
#[case(" . ", Err(Error::InvalidCharacter('.')))]
639-
#[case("☃", Err(Error::InvalidCharacter('☃')))]
640-
#[case("☃ ", Err(Error::InvalidCharacter('☃')))]
641-
#[case(" ☃", Err(Error::InvalidCharacter('☃')))]
642-
#[case(" ☃ ", Err(Error::InvalidCharacter('☃')))]
643-
fn test_validate_string_no_sep(#[case] s: &str, #[case] r: Result<CompactString, Error>) {
606+
#[case("?", Err(JsonSyntaxError::InvalidCharacter('?')))]
607+
#[case(" ?", Err(JsonSyntaxError::InvalidCharacter('?')))]
608+
#[case("? ", Err(JsonSyntaxError::InvalidCharacter('?')))]
609+
#[case(" ? ", Err(JsonSyntaxError::InvalidCharacter('?')))]
610+
#[case("??", Err(JsonSyntaxError::InvalidCharacter('?')))]
611+
#[case("\x0C", Err(JsonSyntaxError::InvalidCharacter('\x0C')))]
612+
#[case("\x0B", Err(JsonSyntaxError::InvalidCharacter('\x0B')))]
613+
#[case("\u{A0}", Err(JsonSyntaxError::InvalidCharacter('\u{A0}')))]
614+
#[case("\u{85}", Err(JsonSyntaxError::InvalidCharacter('\u{85}')))]
615+
#[case("\u{1680}", Err(JsonSyntaxError::InvalidCharacter('\u{1680}')))]
616+
#[case("\u{180E}", Err(JsonSyntaxError::InvalidCharacter('\u{180E}')))]
617+
#[case("\u{2000}", Err(JsonSyntaxError::InvalidCharacter('\u{2000}')))]
618+
#[case("\u{2001}", Err(JsonSyntaxError::InvalidCharacter('\u{2001}')))]
619+
#[case("\u{2002}", Err(JsonSyntaxError::InvalidCharacter('\u{2002}')))]
620+
#[case("\u{2003}", Err(JsonSyntaxError::InvalidCharacter('\u{2003}')))]
621+
#[case("\u{2004}", Err(JsonSyntaxError::InvalidCharacter('\u{2004}')))]
622+
#[case("\u{2005}", Err(JsonSyntaxError::InvalidCharacter('\u{2005}')))]
623+
#[case("\u{2006}", Err(JsonSyntaxError::InvalidCharacter('\u{2006}')))]
624+
#[case("\u{2007}", Err(JsonSyntaxError::InvalidCharacter('\u{2007}')))]
625+
#[case("\u{2008}", Err(JsonSyntaxError::InvalidCharacter('\u{2008}')))]
626+
#[case("\u{2009}", Err(JsonSyntaxError::InvalidCharacter('\u{2009}')))]
627+
#[case("\u{200A}", Err(JsonSyntaxError::InvalidCharacter('\u{200A}')))]
628+
#[case("\u{200B}", Err(JsonSyntaxError::InvalidCharacter('\u{200B}')))]
629+
#[case("\u{200C}", Err(JsonSyntaxError::InvalidCharacter('\u{200C}')))]
630+
#[case("\u{200D}", Err(JsonSyntaxError::InvalidCharacter('\u{200D}')))]
631+
#[case("\u{2028}", Err(JsonSyntaxError::InvalidCharacter('\u{2028}')))]
632+
#[case("\u{2029}", Err(JsonSyntaxError::InvalidCharacter('\u{2029}')))]
633+
#[case("\u{202F}", Err(JsonSyntaxError::InvalidCharacter('\u{202F}')))]
634+
#[case("\u{205F}", Err(JsonSyntaxError::InvalidCharacter('\u{205F}')))]
635+
#[case("\u{2060}", Err(JsonSyntaxError::InvalidCharacter('\u{2060}')))]
636+
#[case("\u{3000}", Err(JsonSyntaxError::InvalidCharacter('\u{3000}')))]
637+
#[case("\u{FEFF}", Err(JsonSyntaxError::InvalidCharacter('\u{FEFF}')))]
638+
#[case("\x0C ", Err(JsonSyntaxError::InvalidCharacter('\x0C')))]
639+
#[case(" \x0C", Err(JsonSyntaxError::InvalidCharacter('\x0C')))]
640+
#[case(" \x0C ", Err(JsonSyntaxError::InvalidCharacter('\x0C')))]
641+
#[case(".", Err(JsonSyntaxError::InvalidCharacter('.')))]
642+
#[case(". ", Err(JsonSyntaxError::InvalidCharacter('.')))]
643+
#[case(" .", Err(JsonSyntaxError::InvalidCharacter('.')))]
644+
#[case(" . ", Err(JsonSyntaxError::InvalidCharacter('.')))]
645+
#[case("☃", Err(JsonSyntaxError::InvalidCharacter('☃')))]
646+
#[case("☃ ", Err(JsonSyntaxError::InvalidCharacter('☃')))]
647+
#[case(" ☃", Err(JsonSyntaxError::InvalidCharacter('☃')))]
648+
#[case(" ☃ ", Err(JsonSyntaxError::InvalidCharacter('☃')))]
649+
fn test_validate_string_no_sep(
650+
#[case] s: &str,
651+
#[case] r: Result<CompactString, JsonSyntaxError>,
652+
) {
644653
assert_eq!(validate_string(s, None), r);
645654
}
646655

@@ -1166,19 +1175,19 @@ mod tests {
11661175

11671176
#[test]
11681177
fn test_display_invalid_character() {
1169-
let e = Error::InvalidCharacter('ö');
1178+
let e = JsonSyntaxError::InvalidCharacter('ö');
11701179
assert_eq!(e.to_string(), "string contains unexpected character 'ö'");
11711180
}
11721181

11731182
#[test]
11741183
fn test_display_missing_separator() {
1175-
let e = Error::MissingSeparator('?');
1184+
let e = JsonSyntaxError::MissingSeparator('?');
11761185
assert_eq!(e.to_string(), "no occurrence of '?' found in string");
11771186
}
11781187

11791188
#[test]
11801189
fn test_display_multiple_separators() {
1181-
let e = Error::MultipleSeparators('?');
1190+
let e = JsonSyntaxError::MultipleSeparators('?');
11821191
assert_eq!(e.to_string(), "multiple occurrences of '?' found in string");
11831192
}
11841193
}

0 commit comments

Comments
 (0)