wasmenv 0.2.3

wasmenv - a version manager for wasm runtimes
use semver_eq::VersionReq;

use comfy_table::{Attribute, Cell, Color, Table};

use crate::utils::list_releases_interactively;

pub fn list(version: Option<VersionReq>, count: Option<usize>, all: bool) -> anyhow::Result<()> {
    let mut releases =
        list_releases_interactively().expect("A list of wasmer versions from github.");
    let mut table = Table::new();
    table.set_header(vec![
        Cell::new("Tags").add_attribute(Attribute::Bold),
        Cell::new("Release").add_attribute(Attribute::Bold),
        Cell::new("Published at").add_attribute(Attribute::Bold),
    ]);
    releases.reverse();
    let release_slice = if let Some(count) = count {
        if count < releases.len() && !all {
            &releases[(releases.len() - count)..]
        } else {
            releases.as_slice()
        }
    } else {
        releases.as_slice()
    };

    for release in release_slice {
        let release_version = release.version();

        if let Some(ref version) = version {
            if !version.matches(&release_version) {
                continue;
            }
        }
        table.add_row(vec![
            Cell::new(release.tags().join(", "))
                .fg(Color::Yellow)
                .add_attribute(Attribute::Italic),
            Cell::new(release_version).add_attribute(Attribute::Bold),
            Cell::new(release.published_time()),
        ]);
    }
    println!("{table}");
    Ok(())
}