swh 0.2.1

A CLI for Switch Hosts
Documentation
use super::CommandHandler;
use crate::cli::list::EnvStates::ENABLED;
use crate::core::config_file::ConfigFile;
use crate::util;
use crate::util::green_cell;
use async_trait::async_trait;
use clap::{Args, ValueEnum};
use miette::Result;

pub struct ListCommand;

#[derive(Args, Debug)]
pub struct ListArgs {
    pub state: Option<EnvStates>,
}

#[derive(ValueEnum, Clone, Debug, PartialEq)]
pub enum EnvStates {
    ENABLED,
    DISABLED,
}

#[async_trait]
impl CommandHandler<ListArgs> for ListCommand {
    async fn process(&self, args: &ListArgs) -> Result<()> {
        let config = ConfigFile::load()?;
        let enabled = args.state.as_ref().map(|s| *s == ENABLED);
        let envs = config.get_envs(&enabled);
        if !envs.is_empty() {
            let header = vec![green_cell("#"), green_cell("env"), green_cell("enabled")];
            let table = util::table(header, envs, false);
            println!("{table}");
        }
        Ok(())
    }
}