use crate::{error::Result, HashSetup};
pub trait IntoHashSetup<'a> {
fn into_hash_setup(self, f: fn(&'a str) -> Result<HashSetup<'a>>) -> Result<HashSetup<'a>>;
}
impl<'a> IntoHashSetup<'a> for &'a str {
fn into_hash_setup(self, f: fn(&'a str) -> Result<HashSetup<'a>>) -> Result<HashSetup<'a>> {
f(self)
}
}
impl<'a> IntoHashSetup<'a> for HashSetup<'a> {
fn into_hash_setup(self, _f: fn(&'a str) -> Result<HashSetup<'a>>) -> Result<HashSetup<'a>> {
Ok(self)
}
}
pub trait FindNul {
fn nul_terminated_subslice(&self) -> &[u8];
}
impl FindNul for str {
fn nul_terminated_subslice(&self) -> &[u8] {
let nul_pos = self
.as_bytes()
.windows(1)
.position(|window| window == [0u8])
.unwrap_or(self.len());
&self.as_bytes()[..nul_pos]
}
}
impl FindNul for [u8] {
fn nul_terminated_subslice(&self) -> &[u8] {
let nul_pos = self
.windows(1)
.position(|window| window == [0u8])
.unwrap_or(self.len());
self[..nul_pos].as_ref()
}
}