From 65d3333a89d900fd7f8c340c08cad75150702cd4 Mon Sep 17 00:00:00 2001 From: Samuel Colvin Date: Tue, 23 Apr 2024 20:31:25 +0100 Subject: [PATCH] better debug for `Peek` (#86) --- crates/jiter/src/parse.rs | 21 ++++++++++++++++++++- crates/jiter/tests/main.rs | 7 +++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/crates/jiter/src/parse.rs b/crates/jiter/src/parse.rs index 3a4336c..487b8fe 100644 --- a/crates/jiter/src/parse.rs +++ b/crates/jiter/src/parse.rs @@ -1,8 +1,10 @@ +use std::fmt; + use crate::errors::{json_err, JsonResult, LinePosition}; use crate::number_decoder::AbstractNumberDecoder; use crate::string_decoder::{AbstractStringDecoder, Tape}; -#[derive(Debug, Copy, Clone, PartialEq, Eq)] +#[derive(Copy, Clone, PartialEq, Eq)] pub struct Peek(u8); #[allow(non_upper_case_globals)] // while testing @@ -18,6 +20,23 @@ impl Peek { pub const Object: Self = Self(b'{'); } +impl fmt::Debug for Peek { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self.0 { + b'n' => write!(f, "Null"), + b't' => write!(f, "True"), + b'f' => write!(f, "False"), + b'-' => write!(f, "Minus"), + b'I' => write!(f, "Infinity"), + b'N' => write!(f, "NaN"), + b'"' => write!(f, "String"), + b'[' => write!(f, "Array"), + b'{' => write!(f, "Object"), + _ => write!(f, "Peek({:?})", self.0 as char), + } + } +} + impl Peek { pub const fn new(next: u8) -> Self { Self(next) diff --git a/crates/jiter/tests/main.rs b/crates/jiter/tests/main.rs index 481e1ac..f6d088b 100644 --- a/crates/jiter/tests/main.rs +++ b/crates/jiter/tests/main.rs @@ -1173,6 +1173,13 @@ fn jiter_wrong_types() { expect_wrong_type!(next_float, JsonType::Float); } +#[test] +fn peek_debug() { + assert_eq!(format!("{:?}", Peek::True), "True"); + assert_eq!(format!("{:?}", Peek::False), "False"); + assert_eq!(format!("{:?}", Peek::new(b'4')), "Peek('4')"); +} + #[test] fn jiter_invalid_numbers() { let mut jiter = Jiter::new(b" -a", false);