diff --git a/src/builder/validator/progressbar_info.rs b/src/builder/validator/progressbar_info.rs index 815883a..172dec8 100644 --- a/src/builder/validator/progressbar_info.rs +++ b/src/builder/validator/progressbar_info.rs @@ -11,7 +11,9 @@ use std::{ sync::{Arc, RwLock, Weak}, }; -use super::validator::{cow_to_fill_type, cow_to_str, cow_to_text_alignment, str_into}; +use super::validator::{ + cow_to_fill_type, cow_to_grow_direction, cow_to_str, cow_to_text_alignment, str_into, +}; pub struct ProgressBarInfo { pub id: String, @@ -39,7 +41,7 @@ impl ProgressBarInfo { attributes: quick_xml::events::attributes::Attributes<'a>, grid: &Arc, ) -> Result { - let mut label_info = ProgressBarInfo { + let mut progress_bar_info = ProgressBarInfo { id: String::new(), x_slot: Mandatory::default(), @@ -64,20 +66,27 @@ impl ProgressBarInfo { let attribute = attribute_res?; match attribute.key.into_inner() { - b"id" => label_info.id = cow_to_str(attribute.value), - b"x_slot" => label_info.x_slot.set(str_into(attribute.value)?), - b"y_slot" => label_info.y_slot.set(str_into(attribute.value)?), - b"x_size" => label_info.x_dim = str_into(attribute.value)?, - b"y_size" => label_info.y_dim = str_into(attribute.value)?, - b"background" => label_info.background = Some(cow_to_fill_type(attribute.value)), - b"foreground" => label_info.foreground = Some(cow_to_fill_type(attribute.value)), + b"id" => progress_bar_info.id = cow_to_str(attribute.value), + b"x_slot" => progress_bar_info.x_slot.set(str_into(attribute.value)?), + b"y_slot" => progress_bar_info.y_slot.set(str_into(attribute.value)?), + b"x_size" => progress_bar_info.x_dim = str_into(attribute.value)?, + b"y_size" => progress_bar_info.y_dim = str_into(attribute.value)?, + b"background" => { + progress_bar_info.background = Some(cow_to_fill_type(attribute.value)) + } + b"foreground" => { + progress_bar_info.foreground = Some(cow_to_fill_type(attribute.value)) + } + b"direction" => { + progress_bar_info.direction = Some(cow_to_grow_direction(attribute.value)?) + } b"text_color" => { let text = cow_to_str(attribute.value); - label_info.text_color = Color::try_from(text.as_str())?; + progress_bar_info.text_color = Color::try_from(text.as_str())?; } - b"text_ratio" => label_info.text_ratio = Some(str_into(attribute.value)?), + b"text_ratio" => progress_bar_info.text_ratio = Some(str_into(attribute.value)?), b"text_alignment" => { - label_info.text_alignment = cow_to_text_alignment(attribute.value)? + progress_bar_info.text_alignment = cow_to_text_alignment(attribute.value)? } _ => { return Err(anyhow::Error::msg(format!( @@ -88,6 +97,6 @@ impl ProgressBarInfo { } } - Ok(label_info) + Ok(progress_bar_info) } } diff --git a/src/builder/validator/validator.rs b/src/builder/validator/validator.rs index b2dc02f..738f24e 100644 --- a/src/builder/validator/validator.rs +++ b/src/builder/validator/validator.rs @@ -537,6 +537,19 @@ pub fn cow_to_text_alignment<'a>(cow: Cow<'a, [u8]>) -> Result { TextAlignment::try_from(text) } +pub fn cow_to_grow_direction<'a>(cow: Cow<'a, [u8]>) -> Result { + let text = cow_to_str(cow); + + match text.as_str() { + "left_to_right" => Ok(GrowDirection::LeftToRight), + "bottom_to_top" => Ok(GrowDirection::BottomToTop), + _ => Err(anyhow::Error::msg(format!( + "failed parsing grow direction: {}", + text + ))), + } +} + pub fn str_to_vert_align<'a>(cow: Cow<'a, [u8]>) -> Result { let string = cow_to_str(cow);