Documentation
#[cfg(feature = "yml")]
pub use const_str;

#[cfg(feature = "yml")]
mod yml;

#[cfg(feature = "yml")]
pub use yml::yml;

#[cfg(feature = "denoise")]
pub mod denoise;

#[cfg(feature = "title_txt")]
mod title_txt;

#[cfg(feature = "title_txt")]
pub use title_txt::title_txt;

mod warn;
pub use warn::Warn;

mod recover;
pub use recover::Recover;

pub enum Msg {
  Warn(Warn),
  Recover(Recover),
  None,
}

#[macro_export]
macro_rules! display {
  ($self:ident,$f:ident) => {{
    write!($f, " {} : {}", $self.watch_name, $self.host)?;
    if !$self.tag_li.is_empty() {
      write!($f, " ")?;
      for (n, i) in $self.tag_li.iter().enumerate() {
        if n > 0 {
          write!($f, " ")?;
        }
        write!($f, "{}", i)?;
      }
    }
    write!($f, "{}", sts::readable($self.duration))?;
  }};
}

use std::path::Path;

use aok::Result;

pub trait Load: Sized {
  fn load(dir: &Path) -> impl std::future::Future<Output = Result<Self>> + Send;
}

impl<T: Default> Load for T {
  async fn load(_dir: &Path) -> Result<Self> {
    Ok(Default::default())
  }
}

pub trait Alter {
  fn warn(&self, warn: &Warn) -> impl std::future::Future<Output = Result<()>> + Send;

  fn recover(&self, recover: &Recover) -> impl std::future::Future<Output = Result<()>> + Send;
}