use std::ops::Deref;
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum UserStyle {
Main,
Pos,
Cmd,
EqualWithValue,
Argument,
EmbeddedValue,
EmbeddedValuePlus,
CombinedOption,
Boolean,
Flag,
}
#[derive(Debug, Clone)]
pub struct OptStyleManager {
styles: Vec<UserStyle>,
}
impl Default for OptStyleManager {
fn default() -> Self {
Self {
styles: vec![
UserStyle::EqualWithValue,
UserStyle::Argument,
UserStyle::Boolean,
UserStyle::EmbeddedValue,
],
}
}
}
impl OptStyleManager {
pub fn with(mut self, styles: Vec<UserStyle>) -> Self {
self.styles = styles;
self
}
pub fn set(&mut self, styles: Vec<UserStyle>) -> &mut Self {
self.styles = styles;
self
}
pub fn remove(&mut self, style: UserStyle) -> &mut Self {
if let Some((index, _)) = self.styles.iter().enumerate().find(|v| v.1 == &style) {
self.styles.remove(index);
}
self
}
pub fn insert(&mut self, index: usize, style: UserStyle) -> &mut Self {
self.styles.insert(index, style);
self
}
pub fn push(&mut self, style: UserStyle) -> &mut Self {
if !self.styles.iter().any(|v| v == &style) {
self.styles.push(style);
}
self
}
}
impl Deref for OptStyleManager {
type Target = Vec<UserStyle>;
fn deref(&self) -> &Self::Target {
&self.styles
}
}