use ansi_term::Colour::Red;
pub struct Message {
text: String,
is_error: bool,
formated: bool,
}
impl Message {
pub fn new() -> Message {
Message {
text: String::with_capacity(160),
is_error: false,
formated: cfg!(target_os = "macos") || cfg!(target_os = "linux"),
}
}
pub fn get(&self) -> String {
self.text.clone()
}
pub fn getf(&self) -> String {
if self.is_error && self.formated {
Red.paint(self.get()).to_string()
} else {
self.get()
}
}
pub fn print(&self) {
println!("{}", self.getf());
}
pub fn add(&mut self, txt: &str) {
self.text.push_str(txt);
}
pub fn add_line(&mut self, line: &str) {
self.add(line);
self.add("\n");
}
pub fn is_formated(&self) -> bool {
self.formated
}
pub fn is_error(&self) -> bool {
self.is_error
}
pub fn set_error(&mut self, state: bool) {
self.is_error = state;
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_message_new() {
let msg = Message::new();
assert_eq!(msg.get(), "");
assert_eq!(msg.is_error(), false);
if cfg!(target_os = "linux") {
assert_eq!(msg.is_formated(), true);
} else if cfg!(target_os = "macos") {
assert_eq!(msg.is_formated(), true);
} else if cfg!(target_os = "windows") {
assert_eq!(msg.is_formated(), false);
} else {
assert_eq!(msg.is_formated(), false);
}
}
#[test]
fn test_message_add() {
let mut msg = Message::new();
msg.add("Some text");
assert_eq!(msg.get(), "Some text");
let mut msg = Message::new();
msg.add_line("Some new line");
assert_eq!(msg.get(), "Some new line\n");
}
#[test]
fn test_message_set_error() {
let mut msg = Message::new();
msg.set_error(true);
assert_eq!(msg.is_error(), true);
msg.set_error(false);
assert_eq!(msg.is_error(), false);
}
}