use serde_json::ser::CompactFormatter;
use serde_json::ser::Formatter;
use super::JsonLexemeLengthWriter;
pub(crate) enum JsonLexemeLength {}
impl JsonLexemeLength {
#[inline(always)]
pub(crate) const fn signed_integer(value: i128) -> usize {
let sign = if value < 0 { 1 } else { 0 };
sign + Self::unsigned_integer(value.unsigned_abs())
}
#[inline(always)]
pub(crate) const fn unsigned_integer(value: u128) -> usize {
if value < 10 { 1 } else { value.ilog10() as usize + 1 }
}
#[inline]
pub(crate) fn finite_f32(value: f32) -> usize {
let mut writer = JsonLexemeLengthWriter::new();
CompactFormatter
.write_f32(&mut writer, value)
.expect("the JSON lexeme length writer must accept a finite f32");
writer.len()
}
#[inline]
pub(crate) fn finite_f64(value: f64) -> usize {
let mut writer = JsonLexemeLengthWriter::new();
CompactFormatter
.write_f64(&mut writer, value)
.expect("the JSON lexeme length writer must accept a finite f64");
writer.len()
}
#[inline(always)]
pub(crate) const fn byte(value: u8) -> usize {
if value < 10 {
1
} else if value < 100 {
2
} else {
3
}
}
}