on 47a3721 help sign in
bat/src/style.rs
95 lines 2.7 kB history raw
1use std::collections::HashSet;
2use std::str::FromStr;
4use crate::errors::*;
6#[derive(Debug, Eq, PartialEq, Copy, Clone, Hash)]
7pub enum StyleComponent {
8 Auto,
9 Changes,
10 Grid,
11 Header,
12 Numbers,
13 Snip,
14 Full,
15 Plain,
18impl StyleComponent {
19 pub fn components(self, interactive_terminal: bool) -> &'static [StyleComponent] {
20 match self {
21 StyleComponent::Auto => {
22 if interactive_terminal {
23 StyleComponent::Full.components(interactive_terminal)
24 } else {
25 StyleComponent::Plain.components(interactive_terminal)
26 }
27 }
28 StyleComponent::Changes => &[StyleComponent::Changes],
29 StyleComponent::Grid => &[StyleComponent::Grid],
30 StyleComponent::Header => &[StyleComponent::Header],
31 StyleComponent::Numbers => &[StyleComponent::Numbers],
32 StyleComponent::Snip => &[StyleComponent::Snip],
33 StyleComponent::Full => &[
34 StyleComponent::Changes,
35 StyleComponent::Grid,
36 StyleComponent::Header,
37 StyleComponent::Numbers,
38 StyleComponent::Snip,
39 ],
40 StyleComponent::Plain => &[],
41 }
42 }
45impl FromStr for StyleComponent {
46 type Err = Error;
48 fn from_str(s: &str) -> Result<Self> {
49 match s {
50 "auto" => Ok(StyleComponent::Auto),
51 "changes" => Ok(StyleComponent::Changes),
52 "grid" => Ok(StyleComponent::Grid),
53 "header" => Ok(StyleComponent::Header),
54 "numbers" => Ok(StyleComponent::Numbers),
55 "snip" => Ok(StyleComponent::Snip),
56 "full" => Ok(StyleComponent::Full),
57 "plain" => Ok(StyleComponent::Plain),
58 _ => Err(format!("Unknown style '{}'", s).into()),
59 }
60 }
63#[derive(Debug, Clone, Default)]
64pub struct StyleComponents(pub HashSet<StyleComponent>);
66impl StyleComponents {
67 pub fn new(components: &[StyleComponent]) -> StyleComponents {
68 StyleComponents(components.iter().cloned().collect())
69 }
71 #[cfg(feature = "git")]
72 pub fn changes(&self) -> bool {
73 self.0.contains(&StyleComponent::Changes)
74 }
76 pub fn grid(&self) -> bool {
77 self.0.contains(&StyleComponent::Grid)
78 }
80 pub fn header(&self) -> bool {
81 self.0.contains(&StyleComponent::Header)
82 }
84 pub fn numbers(&self) -> bool {
85 self.0.contains(&StyleComponent::Numbers)
86 }
88 pub fn snip(&self) -> bool {
89 self.0.contains(&StyleComponent::Snip)
90 }
92 pub fn plain(&self) -> bool {
93 self.0.iter().all(|c| c == &StyleComponent::Plain)
94 }