xref: /DADK/dadk/src/console/user.rs (revision eaa67f3cf8881c221a744937c6318444b068a801)
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