mirror of
https://github.com/ClementTsang/bottom.git
synced 2025-07-23 05:34:57 +02:00
refactor: update error messages and hex error detection
This commit is contained in:
parent
b1f86262f3
commit
04e4c32aec
@ -96,17 +96,34 @@ pub fn gen_n_styles(num_to_gen: i32) -> Vec<Style> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn convert_hex_to_color(hex: &str) -> error::Result<Color> {
|
pub fn convert_hex_to_color(hex: &str) -> error::Result<Color> {
|
||||||
|
fn hex_err(hex: &str) -> error::Result<u8> {
|
||||||
|
Err(
|
||||||
|
error::BottomError::ConfigError(format!(
|
||||||
|
"invalid color hex: error when parsing hex value {}. It must be a valid 7 character hex string of the (ie: \"#112233\")."
|
||||||
|
, hex))
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
fn convert_hex_to_rgb(hex: &str) -> error::Result<(u8, u8, u8)> {
|
fn convert_hex_to_rgb(hex: &str) -> error::Result<(u8, u8, u8)> {
|
||||||
if hex.len() == 7 && &hex[0..1] == "#" {
|
let hex_components: Vec<char> = hex.chars().collect();
|
||||||
let r = u8::from_str_radix(&hex[1..3], 16)?;
|
|
||||||
let g = u8::from_str_radix(&hex[3..5], 16)?;
|
if hex_components.len() == 7 {
|
||||||
let b = u8::from_str_radix(&hex[5..7], 16)?;
|
let mut r_string = hex_components[1].to_string();
|
||||||
|
r_string.push(hex_components[2]);
|
||||||
|
let mut g_string = hex_components[3].to_string();
|
||||||
|
g_string.push(hex_components[4]);
|
||||||
|
let mut b_string = hex_components[5].to_string();
|
||||||
|
b_string.push(hex_components[6]);
|
||||||
|
|
||||||
|
let r = u8::from_str_radix(&r_string, 16).or_else(|_err| hex_err(hex))?;
|
||||||
|
let g = u8::from_str_radix(&g_string, 16).or_else(|_err| hex_err(hex))?;
|
||||||
|
let b = u8::from_str_radix(&b_string, 16).or_else(|_err| hex_err(hex))?;
|
||||||
|
|
||||||
return Ok((r, g, b));
|
return Ok((r, g, b));
|
||||||
}
|
}
|
||||||
|
|
||||||
Err(error::BottomError::GenericError(format!(
|
Err(error::BottomError::ConfigError(format!(
|
||||||
"Colour hex {} is not of valid length. It must be a 7 character string of the form \"#112233\".",
|
"invalid color hex: value {} is not of valid length. It must be a 7 character string of the form \"#112233\".",
|
||||||
hex
|
hex
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
@ -125,8 +142,8 @@ pub fn get_style_from_config(input_val: &str) -> error::Result<Style> {
|
|||||||
get_style_from_color_name(input_val)
|
get_style_from_color_name(input_val)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Err(error::BottomError::GenericError(format!(
|
Err(error::BottomError::ConfigError(format!(
|
||||||
"Colour input {} is not valid.",
|
"invalid color: value {} is not valid.",
|
||||||
input_val
|
input_val
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
@ -142,8 +159,8 @@ pub fn get_colour_from_config(input_val: &str) -> error::Result<Color> {
|
|||||||
convert_name_to_color(input_val)
|
convert_name_to_color(input_val)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Err(error::BottomError::GenericError(format!(
|
Err(error::BottomError::ConfigError(format!(
|
||||||
"Colour input {} is not valid.",
|
"invalid color: value {} is not valid.",
|
||||||
input_val
|
input_val
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
@ -154,8 +171,16 @@ pub fn get_style_from_hex(hex: &str) -> error::Result<Style> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn convert_rgb_to_color(rgb_str: &str) -> error::Result<Color> {
|
fn convert_rgb_to_color(rgb_str: &str) -> error::Result<Color> {
|
||||||
let rgb_list = rgb_str.split(',');
|
let rgb_list = rgb_str.split(',').collect::<Vec<&str>>();
|
||||||
|
if rgb_list.len() != 3 {
|
||||||
|
return Err(error::BottomError::ConfigError(format!(
|
||||||
|
"invalid RGB color: value {} is not of valid length. It must be a comma separated value with 3 integers from 0 to 255 (ie: \"255, 0, 155\").",
|
||||||
|
rgb_str
|
||||||
|
)));
|
||||||
|
}
|
||||||
|
|
||||||
let rgb = rgb_list
|
let rgb = rgb_list
|
||||||
|
.iter()
|
||||||
.filter_map(|val| {
|
.filter_map(|val| {
|
||||||
if let Ok(res) = val.to_string().trim().parse::<u8>() {
|
if let Ok(res) = val.to_string().trim().parse::<u8>() {
|
||||||
Some(res)
|
Some(res)
|
||||||
@ -167,8 +192,8 @@ fn convert_rgb_to_color(rgb_str: &str) -> error::Result<Color> {
|
|||||||
if rgb.len() == 3 {
|
if rgb.len() == 3 {
|
||||||
Ok(Color::Rgb(rgb[0], rgb[1], rgb[2]))
|
Ok(Color::Rgb(rgb[0], rgb[1], rgb[2]))
|
||||||
} else {
|
} else {
|
||||||
Err(error::BottomError::GenericError(format!(
|
Err(error::BottomError::ConfigError(format!(
|
||||||
"RGB colour {} is not of valid length. It must be a comma separated value with 3 integers from 0 to 255, like \"255, 0, 155\".",
|
"invalid RGB color: value {} contained invalid RGB values. It must be a comma separated value with 3 integers from 0 to 255 (ie: \"255, 0, 155\").",
|
||||||
rgb_str
|
rgb_str
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
@ -184,8 +209,8 @@ fn convert_name_to_color(color_name: &str) -> error::Result<Color> {
|
|||||||
return Ok(*color);
|
return Ok(*color);
|
||||||
}
|
}
|
||||||
|
|
||||||
Err(error::BottomError::GenericError(format!(
|
Err(error::BottomError::ConfigError(format!(
|
||||||
"Color {} is not a supported config colour. bottom supports the following named colours as strings: \
|
"invalid named color: value {} is not a supported named colour. The following are supported strings: \
|
||||||
Reset, Black, Red, Green, Yellow, Blue, Magenta, Cyan, Gray, DarkGray, LightRed, LightGreen, \
|
Reset, Black, Red, Green, Yellow, Blue, Magenta, Cyan, Gray, DarkGray, LightRed, LightGreen, \
|
||||||
LightYellow, LightBlue, LightMagenta, LightCyan, White",
|
LightYellow, LightBlue, LightMagenta, LightCyan, White",
|
||||||
color_name
|
color_name
|
||||||
|
Loading…
x
Reference in New Issue
Block a user