on 710a1df help sign in
bat/src/style.rs
96 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 OutputComponent {
8 Auto,
9 Changes,
10 Grid,
11 Header,
12 Numbers,
13 Snip,
14 Full,
15 Plain,
18#[derive(Debug, Eq, PartialEq, Copy, Clone, Hash)]
19pub enum OutputWrap {
20 Character,
21 None,
24impl OutputComponent {
25 pub fn components(self, interactive_terminal: bool) -> &'static [OutputComponent] {
26 match self {
27 OutputComponent::Auto => {
28 if interactive_terminal {
29 OutputComponent::Full.components(interactive_terminal)
30 } else {
31 OutputComponent::Plain.components(interactive_terminal)
32 }
33 }
34 OutputComponent::Changes => &[OutputComponent::Changes],
35 OutputComponent::Grid => &[OutputComponent::Grid],
36 OutputComponent::Header => &[OutputComponent::Header],
37 OutputComponent::Numbers => &[OutputComponent::Numbers],
38 OutputComponent::Snip => &[OutputComponent::Snip],
39 OutputComponent::Full => &[
40 OutputComponent::Changes,
41 OutputComponent::Grid,
42 OutputComponent::Header,
43 OutputComponent::Numbers,
44 OutputComponent::Snip,
45 ],
46 OutputComponent::Plain => &[],
47 }
48 }
51impl FromStr for OutputComponent {
52 type Err = Error;
54 fn from_str(s: &str) -> Result<Self> {
55 match s {
56 "auto" => Ok(OutputComponent::Auto),
57 "changes" => Ok(OutputComponent::Changes),
58 "grid" => Ok(OutputComponent::Grid),
59 "header" => Ok(OutputComponent::Header),
60 "numbers" => Ok(OutputComponent::Numbers),
61 "snip" => Ok(OutputComponent::Snip),
62 "full" => Ok(OutputComponent::Full),
63 "plain" => Ok(OutputComponent::Plain),
64 _ => Err(format!("Unknown style '{}'", s).into()),
65 }
66 }
69#[derive(Clone)]
70pub struct OutputComponents(pub HashSet<OutputComponent>);
72impl OutputComponents {
73 pub fn changes(&self) -> bool {
74 self.0.contains(&OutputComponent::Changes)
75 }
77 pub fn grid(&self) -> bool {
78 self.0.contains(&OutputComponent::Grid)
79 }
81 pub fn header(&self) -> bool {
82 self.0.contains(&OutputComponent::Header)
83 }
85 pub fn numbers(&self) -> bool {
86 self.0.contains(&OutputComponent::Numbers)
87 }
89 pub fn snip(&self) -> bool {
90 self.0.contains(&OutputComponent::Snip)
91 }
93 pub fn plain(&self) -> bool {
94 self.0.iter().all(|c| c == &OutputComponent::Plain)
95 }