tempera 0.3.1

Template based terminal coloring made really easy.
Documentation
use std::{panic, thread};
use tempera::custom::CUSTOM;
use tempera::{add_style, colorize, colorize_template, delete_styles, resolve_styles};

#[test]
fn add_style_returns_an_error_when_the_lock_is_poisoned() {
  let old_hook = panic::take_hook();
  panic::set_hook(Box::new(|_| {}));

  let handle = thread::spawn(move || {
    let _writer = CUSTOM.write().unwrap();
    panic!("Crash!");
  });

  let _ = handle.join();
  panic::set_hook(old_hook);

  assert!(matches!(
    add_style("my_style", &["red"]),
    Err(tempera::Error::LockPoisoned)
  ));
}

#[test]
fn delete_styles_returns_an_error_when_the_lock_is_poisoned() {
  let old_hook = panic::take_hook();
  panic::set_hook(Box::new(|_| {}));

  let handle = thread::spawn(move || {
    let _writer = CUSTOM.write().unwrap();
    panic!("Crash!");
  });

  let _ = handle.join();
  panic::set_hook(old_hook);

  assert!(matches!(
    delete_styles(&["my_style"]),
    Err(tempera::Error::LockPoisoned)
  ));
}

#[test]
fn resolve_styles_returns_an_error_when_the_lock_is_poisoned() {
  let old_hook = panic::take_hook();
  panic::set_hook(Box::new(|_| {}));

  let handle = thread::spawn(move || {
    let _writer = CUSTOM.write().unwrap();
    panic!("Crash!");
  });

  let _ = handle.join();
  panic::set_hook(old_hook);

  assert!(matches!(
    resolve_styles(&["my_style"]),
    Err(tempera::Error::LockPoisoned)
  ));
}

#[test]
fn colorize_becomes_a_noop_when_the_lock_is_poisoned() {
  let old_hook = panic::take_hook();
  panic::set_hook(Box::new(|_| {}));

  let handle = thread::spawn(move || {
    let _writer = CUSTOM.write().unwrap();
    panic!("Crash!");
  });

  let _ = handle.join();
  panic::set_hook(old_hook);

  assert_eq!(colorize("ABC", &["bg_Black", "red"]), "ABC");
}

#[test]
fn colorize_template_becomes_a_noop_when_the_lock_is_poisoned() {
  let old_hook = panic::take_hook();
  panic::set_hook(Box::new(|_| {}));

  let handle = thread::spawn(move || {
    let _writer = CUSTOM.write().unwrap();
    panic!("Crash!");
  });

  let _ = handle.join();
  panic::set_hook(old_hook);

  assert_eq!(colorize_template("{red}ABC{-}"), "ABC");
}