cnctd_cli 0.3.0

CLI for scaffolding and managing projects
use std::fmt;

use cnctd_dialogue::Dialog;
use serde::{Deserialize, Serialize};
use strum_macros::EnumIter;

#[derive(Debug, Deserialize, Serialize, Clone, Default, PartialEq)]
pub struct GoModuleScaffold {
    features: Vec<GoModFeature>,
}

#[derive(Debug, Deserialize, Serialize, Clone, EnumIter, PartialEq)]
pub enum GoModFeature {
    Async,
    Tests,    
}

impl fmt::Display for GoModFeature {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        let display_str = match self {
            Self::Async => "Async",
            Self::Tests => "Tests",
        };
        write!(f, "{}", display_str)
    }
}

impl GoModuleScaffold {
    pub fn new() -> Self {
        Self {
            features: vec![]
        }
    }

    fn select_features(&mut self) -> &mut Self {
        let default_features = Some(vec![GoModFeature::Async, GoModFeature::Tests]);
        let selected_features = Dialog::multi_select::<GoModFeature>("Pick your module options?", default_features, None, None);
    
        self.features = selected_features;
        
        self
    }

    pub fn choose_options() -> Self {
        let mut rust_module = Self::new();
        rust_module.select_features();
        
        rust_module
    }

    
}