use std::collections::HashSet;
use std::iter::FromIterator;
pub trait Inner {
fn new_with_inner(v: HashSet<char>) -> Self;
fn inner(&self) -> &HashSet<char>;
}
pub trait Delimiters: Inner + Sized {
fn new(vec: Vec<char>) -> Self {
Self::new_with_inner(
HashSet::from_iter(vec.iter().cloned())
)
}
fn contains(&self, ch: char) -> bool {
self.inner().contains(&ch)
}
}
pub struct DiscardDelimiters(HashSet<char>);
impl Inner for DiscardDelimiters {
fn new_with_inner(v: HashSet<char>) -> Self {
Self(v)
}
fn inner(&self) -> &HashSet<char> {
&self.0
}
}
impl Delimiters for DiscardDelimiters {}
pub struct KeepDelimiters(HashSet<char>);
impl Delimiters for KeepDelimiters {}
impl Inner for KeepDelimiters {
fn new_with_inner(v: HashSet<char>) -> Self {
Self(v)
}
fn inner(&self) -> &HashSet<char> {
&self.0
}
}
pub struct DelimitersParam {
pub keep: KeepDelimiters,
pub discard: DiscardDelimiters
}