use crate::base64;
use crate::error::{InvalidSeparator, SeparatorNotFound};
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
pub struct Separator(pub(crate) char);
impl Separator {
pub fn new(separator: char) -> Result<Self, InvalidSeparator> {
if base64::in_alphabet(separator) {
Err(InvalidSeparator(separator))
} else {
Ok(Self(separator))
}
}
#[inline(always)]
pub fn split<'a>(&self, value: &'a str) -> Result<(&'a str, &'a str), SeparatorNotFound> {
let mut iterator = value.rsplitn(2, self.0);
let second = iterator.next().unwrap();
let first = match iterator.next() {
None => return Err(SeparatorNotFound { separator: *self }),
Some(val) => val,
};
Ok((first, second))
}
}
impl Default for Separator {
fn default() -> Self {
Self('.')
}
}