#![allow(dead_code)]
#[derive(Debug, Clone)]
pub struct StatusSegment {
pub key: String,
pub value: String,
}
#[derive(Debug, Clone)]
pub struct StatusBarView {
pub segments: Vec<StatusSegment>,
pub message: String,
pub show_memory: bool,
pub enabled: bool,
}
pub fn new_status_bar_view() -> StatusBarView {
StatusBarView {
segments: Vec::new(),
message: String::new(),
show_memory: true,
enabled: true,
}
}
pub fn sbv_set_message(v: &mut StatusBarView, msg: &str) {
v.message = msg.to_string();
}
pub fn sbv_add_segment(v: &mut StatusBarView, key: &str, value: &str) {
v.segments.push(StatusSegment {
key: key.to_string(),
value: value.to_string(),
});
}
pub fn sbv_update_segment(v: &mut StatusBarView, key: &str, value: &str) {
if let Some(s) = v.segments.iter_mut().find(|s| s.key == key) {
s.value = value.to_string();
}
}
pub fn sbv_display_string(v: &StatusBarView) -> String {
v.segments
.iter()
.map(|s| format!("{}: {}", s.key, s.value))
.collect::<Vec<_>>()
.join(" | ")
}
pub fn sbv_to_json(v: &StatusBarView) -> String {
format!(
r#"{{"message":"{}","segment_count":{},"enabled":{}}}"#,
v.message,
v.segments.len(),
v.enabled
)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_empty_message() {
let v = new_status_bar_view();
assert!(v.message.is_empty() );
}
#[test]
fn set_message() {
let mut v = new_status_bar_view();
sbv_set_message(&mut v, "Ready");
assert_eq!(v.message, "Ready" );
}
#[test]
fn add_segment() {
let mut v = new_status_bar_view();
sbv_add_segment(&mut v, "FPS", "60");
assert_eq!(v.segments.len(), 1 );
}
#[test]
fn update_segment() {
let mut v = new_status_bar_view();
sbv_add_segment(&mut v, "FPS", "60");
sbv_update_segment(&mut v, "FPS", "30");
assert_eq!(v.segments[0].value, "30" );
}
#[test]
fn display_string_joined() {
let mut v = new_status_bar_view();
sbv_add_segment(&mut v, "FPS", "60");
sbv_add_segment(&mut v, "Tris", "1000");
let s = sbv_display_string(&v);
assert!(s.contains("FPS: 60") && s.contains("Tris: 1000") );
}
#[test]
fn json_has_message() {
let mut v = new_status_bar_view();
sbv_set_message(&mut v, "Loading");
assert!(sbv_to_json(&v).contains("Loading") );
}
#[test]
fn show_memory_default() {
let v = new_status_bar_view();
assert!(v.show_memory );
}
#[test]
fn enabled_default() {
let v = new_status_bar_view();
assert!(v.enabled );
}
}