checker 0.0.3

A crates.io crate name availability checker
Documentation
use crate::common::*;

pub struct Table {
  table: PrettyTable,
}

impl Display for Table {
  fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
    write!(f, "{}", self.table.to_string())
  }
}

impl Table {
  pub fn new() -> Self {
    let mut table = PrettyTable::new();

    table.set_format(*format::consts::FORMAT_BOX_CHARS);

    table.add_row(row!["Name", "Status", "Owner(s)", "Last Updated",]);

    Self { table }
  }

  pub fn add_row(&mut self, package: Package) -> Result<()> {
    match package.status {
      Status::Free => {
        self.table.add_row(row![
          package.name,
          Fg -> &package.status.to_string(),
          "N/A",
          "N/A"
        ]);
      }
      Status::Taken => {
        let days = &package.days_since_last_updated()?;

        let mut owners = String::new();
        if let Some(package_owners) = &package.owners {
          for owner in package_owners {
            owners.push_str(&owner.to_string());
          }
        }

        self.table.add_row(row![
          package.name,
          Fr -> &package.status.to_string(),
          owners,
          format!("{} day(s) ago", days),
        ]);
      }
      _ => {}
    }

    Ok(())
  }

  pub fn print(&self) {
    self.table.printstd();
  }
}