mirror of
https://github.com/sharkdp/bat.git
synced 2025-02-21 20:38:44 +00:00
Add infallible constructor
This commit is contained in:
parent
16d9b99f6c
commit
e075fee5bf
60
src/theme.rs
60
src/theme.rs
@ -48,9 +48,9 @@ pub struct ThemeOptions {
|
|||||||
///
|
///
|
||||||
/// The easiest way to construct this is from a string:
|
/// The easiest way to construct this is from a string:
|
||||||
/// ```
|
/// ```
|
||||||
/// # use bat::theme::ThemePreference;
|
/// # use bat::theme::{ThemePreference, DetectColorScheme};
|
||||||
/// # use std::str::FromStr as _;
|
/// let preference = ThemePreference::new("auto:system");
|
||||||
/// let preference = ThemePreference::from_str("auto:system").unwrap();
|
/// assert_eq!(ThemePreference::Auto(DetectColorScheme::System), preference);
|
||||||
/// ```
|
/// ```
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
pub enum ThemePreference {
|
pub enum ThemePreference {
|
||||||
@ -71,19 +71,26 @@ impl Default for ThemePreference {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl ThemePreference {
|
||||||
|
/// Creates a theme preference from a string.
|
||||||
|
pub fn new(s: &str) -> Self {
|
||||||
|
use ThemePreference::*;
|
||||||
|
match s {
|
||||||
|
"auto" => Auto(Default::default()),
|
||||||
|
"auto:always" => Auto(DetectColorScheme::Always),
|
||||||
|
"auto:system" => Auto(DetectColorScheme::System),
|
||||||
|
"dark" => Dark,
|
||||||
|
"light" => Light,
|
||||||
|
_ => Fixed(ThemeName::new(s)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl FromStr for ThemePreference {
|
impl FromStr for ThemePreference {
|
||||||
type Err = Infallible;
|
type Err = Infallible;
|
||||||
|
|
||||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||||
use ThemePreference::*;
|
Ok(ThemePreference::new(s))
|
||||||
match s {
|
|
||||||
"auto" => Ok(Auto(Default::default())),
|
|
||||||
"auto:always" => Ok(Auto(DetectColorScheme::Always)),
|
|
||||||
"auto:system" => Ok(Auto(DetectColorScheme::System)),
|
|
||||||
"dark" => Ok(Dark),
|
|
||||||
"light" => Ok(Light),
|
|
||||||
_ => ThemeName::from_str(s).map(Fixed),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,9 +98,8 @@ impl FromStr for ThemePreference {
|
|||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// # use bat::theme::ThemeName;
|
/// # use bat::theme::ThemeName;
|
||||||
/// # use std::str::FromStr as _;
|
/// assert_eq!(ThemeName::Default, ThemeName::new("default"));
|
||||||
/// assert_eq!(ThemeName::Default, ThemeName::from_str("default").unwrap());
|
/// assert_eq!(ThemeName::Named("example".to_string()), ThemeName::new("example"));
|
||||||
/// assert_eq!(ThemeName::Named("example".to_string()), ThemeName::from_str("example").unwrap());
|
|
||||||
/// ```
|
/// ```
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
pub enum ThemeName {
|
pub enum ThemeName {
|
||||||
@ -101,14 +107,30 @@ pub enum ThemeName {
|
|||||||
Default,
|
Default,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl ThemeName {
|
||||||
|
/// Creates a theme name from a string.
|
||||||
|
pub fn new(s: &str) -> Self {
|
||||||
|
if s == "default" {
|
||||||
|
ThemeName::Default
|
||||||
|
} else {
|
||||||
|
ThemeName::Named(s.to_owned())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl FromStr for ThemeName {
|
impl FromStr for ThemeName {
|
||||||
type Err = Infallible;
|
type Err = Infallible;
|
||||||
|
|
||||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||||
if s == "default" {
|
Ok(ThemeName::new(s))
|
||||||
Ok(ThemeName::Default)
|
}
|
||||||
} else {
|
}
|
||||||
Ok(ThemeName::Named(s.to_owned()))
|
|
||||||
|
impl fmt::Display for ThemeName {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
match self {
|
||||||
|
ThemeName::Named(t) => f.write_str(t),
|
||||||
|
ThemeName::Default => f.write_str("default"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user