use std::fmt;
pub(in crate::wire) struct NumberTextComparator<'a> {
expected: &'a [u8],
offset: usize,
}
impl<'a> NumberTextComparator<'a> {
#[must_use]
#[inline]
pub(in crate::wire) fn new(expected: &'a [u8]) -> Self {
Self {
expected,
offset: 0,
}
}
#[must_use]
#[inline]
pub(in crate::wire) fn is_equal(&self) -> bool {
self.offset == self.expected.len()
}
}
impl fmt::Write for NumberTextComparator<'_> {
fn write_str(&mut self, value: &str) -> fmt::Result {
let Some(end) = self.offset.checked_add(value.len()) else {
return Err(fmt::Error);
};
let Some(expected) = self.expected.get(self.offset..end) else {
return Err(fmt::Error);
};
if expected != value.as_bytes() {
return Err(fmt::Error);
}
self.offset = end;
Ok(())
}
}