#[cfg(feature = "parse")]
pub unsafe trait Buffer<'a> {
const IS_CONTIGUOUS: bool;
fn as_ptr(&self) -> *const u8;
fn as_slice(&self) -> &'a [u8];
#[inline(always)]
fn is_empty(&self) -> bool {
self.as_slice().is_empty()
}
#[inline(always)]
fn is_contiguous(&self) -> bool {
Self::IS_CONTIGUOUS
}
unsafe fn first_unchecked(&self) -> &'a u8;
#[inline(always)]
fn first(&self) -> Option<&'a u8> {
if !self.is_empty() {
unsafe { Some(self.first_unchecked()) }
} else {
None
}
}
#[inline(always)]
fn first_is(&self, value: u8) -> bool {
if let Some(&c) = self.first() {
c == value
} else {
false
}
}
#[inline(always)]
fn case_insensitive_first_is(&self, value: u8) -> bool {
if let Some(&c) = self.first() {
c.to_ascii_lowercase() == value.to_ascii_lowercase()
} else {
false
}
}
}