1*eaa67f3cSLoGin use clap::{Parser, Subcommand, ValueEnum}; 2*eaa67f3cSLoGin 3*eaa67f3cSLoGin #[derive(Debug, Subcommand, Clone, PartialEq, Eq)] 4*eaa67f3cSLoGin pub enum UserCommand { 5*eaa67f3cSLoGin Build, 6*eaa67f3cSLoGin Clean(UserCleanCommand), 7*eaa67f3cSLoGin Install, 8*eaa67f3cSLoGin } 9*eaa67f3cSLoGin 10*eaa67f3cSLoGin #[derive(Debug, Parser, Clone, PartialEq, Eq)] 11*eaa67f3cSLoGin pub struct UserCleanCommand { 12*eaa67f3cSLoGin /// 清理级别 13*eaa67f3cSLoGin #[clap(long, default_value = "all")] 14*eaa67f3cSLoGin pub level: UserCleanLevel, 15*eaa67f3cSLoGin /// 要清理的task 16*eaa67f3cSLoGin #[clap(long)] 17*eaa67f3cSLoGin pub task: Option<String>, 18*eaa67f3cSLoGin } 19*eaa67f3cSLoGin 20*eaa67f3cSLoGin #[derive(Debug, Clone, Copy, PartialEq, Eq, ValueEnum)] 21*eaa67f3cSLoGin pub enum UserCleanLevel { 22*eaa67f3cSLoGin /// 清理所有用户程序构建缓存 23*eaa67f3cSLoGin All, 24*eaa67f3cSLoGin /// 只在用户程序源码目录下清理 25*eaa67f3cSLoGin InSrc, 26*eaa67f3cSLoGin /// 只清理用户程序输出目录 27*eaa67f3cSLoGin Output, 28*eaa67f3cSLoGin } 29*eaa67f3cSLoGin 30*eaa67f3cSLoGin impl Into<dadk_config::user::UserCleanLevel> for UserCleanLevel { into(self) -> dadk_config::user::UserCleanLevel31*eaa67f3cSLoGin fn into(self) -> dadk_config::user::UserCleanLevel { 32*eaa67f3cSLoGin match self { 33*eaa67f3cSLoGin UserCleanLevel::All => dadk_config::user::UserCleanLevel::All, 34*eaa67f3cSLoGin UserCleanLevel::InSrc => dadk_config::user::UserCleanLevel::InSrc, 35*eaa67f3cSLoGin UserCleanLevel::Output => dadk_config::user::UserCleanLevel::Output, 36*eaa67f3cSLoGin } 37*eaa67f3cSLoGin } 38*eaa67f3cSLoGin } 39*eaa67f3cSLoGin 40*eaa67f3cSLoGin impl Into<dadk_user::context::Action> for UserCommand { into(self) -> dadk_user::context::Action41*eaa67f3cSLoGin fn into(self) -> dadk_user::context::Action { 42*eaa67f3cSLoGin match self { 43*eaa67f3cSLoGin UserCommand::Build => dadk_user::context::Action::Build, 44*eaa67f3cSLoGin UserCommand::Install => dadk_user::context::Action::Install, 45*eaa67f3cSLoGin UserCommand::Clean(args) => dadk_user::context::Action::Clean(args.level.into()), 46*eaa67f3cSLoGin } 47*eaa67f3cSLoGin } 48*eaa67f3cSLoGin } 49*eaa67f3cSLoGin 50*eaa67f3cSLoGin #[cfg(test)] 51*eaa67f3cSLoGin mod tests { 52*eaa67f3cSLoGin 53*eaa67f3cSLoGin use super::*; 54*eaa67f3cSLoGin 55*eaa67f3cSLoGin #[test] test_user_clean_level_from_str()56*eaa67f3cSLoGin fn test_user_clean_level_from_str() { 57*eaa67f3cSLoGin // Test valid cases 58*eaa67f3cSLoGin assert_eq!( 59*eaa67f3cSLoGin UserCleanLevel::from_str("all", true).unwrap(), 60*eaa67f3cSLoGin UserCleanLevel::All 61*eaa67f3cSLoGin ); 62*eaa67f3cSLoGin assert_eq!( 63*eaa67f3cSLoGin UserCleanLevel::from_str("in-src", true).unwrap(), 64*eaa67f3cSLoGin UserCleanLevel::InSrc 65*eaa67f3cSLoGin ); 66*eaa67f3cSLoGin assert_eq!( 67*eaa67f3cSLoGin UserCleanLevel::from_str("output", true).unwrap(), 68*eaa67f3cSLoGin UserCleanLevel::Output 69*eaa67f3cSLoGin ); 70*eaa67f3cSLoGin 71*eaa67f3cSLoGin // Test invalid case 72*eaa67f3cSLoGin assert!(UserCleanLevel::from_str("invalid", true).is_err()); 73*eaa67f3cSLoGin } 74*eaa67f3cSLoGin } 75