xref: /DragonOS/user/apps/user-manage/src/parser/cmd.rs (revision 03746da3d9f3ea616cecdb6e581414002075f866)
1*03746da3SJomo use std::collections::HashMap;
2*03746da3SJomo 
3*03746da3SJomo /// 命令类型
4*03746da3SJomo pub enum CmdType {
5*03746da3SJomo     User,
6*03746da3SJomo     Passwd,
7*03746da3SJomo     Group,
8*03746da3SJomo }
9*03746da3SJomo 
10*03746da3SJomo #[derive(Debug, PartialEq, Eq, Hash, Clone)]
11*03746da3SJomo pub enum CmdOption {
12*03746da3SJomo     /// 用户描述
13*03746da3SJomo     Comment,
14*03746da3SJomo     /// 用户主目录
15*03746da3SJomo     Dir,
16*03746da3SJomo     /// 组名
17*03746da3SJomo     Group,
18*03746da3SJomo     /// 组id
19*03746da3SJomo     Gid,
20*03746da3SJomo     /// 终端程序
21*03746da3SJomo     Shell,
22*03746da3SJomo     /// 用户id
23*03746da3SJomo     Uid,
24*03746da3SJomo     /// 删除用户的home目录
25*03746da3SJomo     Remove,
26*03746da3SJomo     /// 添加到其它用户组中
27*03746da3SJomo     Append,
28*03746da3SJomo     /// 修改用户名
29*03746da3SJomo     Login,
30*03746da3SJomo     /// 设置组密码
31*03746da3SJomo     Passwd,
32*03746da3SJomo     /// 修改组名
33*03746da3SJomo     NewGroupName,
34*03746da3SJomo     /// 无效选项
35*03746da3SJomo     Invalid,
36*03746da3SJomo }
37*03746da3SJomo 
38*03746da3SJomo impl From<String> for CmdOption {
from(s: String) -> Self39*03746da3SJomo     fn from(s: String) -> Self {
40*03746da3SJomo         match s.as_str() {
41*03746da3SJomo             "-c" => CmdOption::Comment,
42*03746da3SJomo             "-d" => CmdOption::Dir,
43*03746da3SJomo             "-G" => CmdOption::Group,
44*03746da3SJomo             "-g" => CmdOption::Gid,
45*03746da3SJomo             "-s" => CmdOption::Shell,
46*03746da3SJomo             "-u" => CmdOption::Uid,
47*03746da3SJomo             "-r" => CmdOption::Remove,
48*03746da3SJomo             "-a" => CmdOption::Append,
49*03746da3SJomo             "-l" => CmdOption::Login,
50*03746da3SJomo             "-p" => CmdOption::Passwd,
51*03746da3SJomo             "-n" => CmdOption::NewGroupName,
52*03746da3SJomo             _ => CmdOption::Invalid,
53*03746da3SJomo         }
54*03746da3SJomo     }
55*03746da3SJomo }
56*03746da3SJomo 
57*03746da3SJomo impl From<CmdOption> for &str {
from(option: CmdOption) -> Self58*03746da3SJomo     fn from(option: CmdOption) -> Self {
59*03746da3SJomo         match option {
60*03746da3SJomo             CmdOption::Comment => "-c",
61*03746da3SJomo             CmdOption::Dir => "-d",
62*03746da3SJomo             CmdOption::Group => "-G",
63*03746da3SJomo             CmdOption::Shell => "-s",
64*03746da3SJomo             CmdOption::Uid => "-u",
65*03746da3SJomo             CmdOption::Login => "-l",
66*03746da3SJomo             CmdOption::Append => "-a",
67*03746da3SJomo             CmdOption::Gid => "-g",
68*03746da3SJomo             CmdOption::NewGroupName => "-n",
69*03746da3SJomo             CmdOption::Passwd => "-p",
70*03746da3SJomo             CmdOption::Remove => "-r",
71*03746da3SJomo             CmdOption::Invalid => "Invalid option",
72*03746da3SJomo         }
73*03746da3SJomo     }
74*03746da3SJomo }
75*03746da3SJomo 
76*03746da3SJomo /// useradd/userdel/usermod命令
77*03746da3SJomo #[derive(Debug)]
78*03746da3SJomo pub struct UserCommand {
79*03746da3SJomo     /// 用户名
80*03746da3SJomo     pub username: String,
81*03746da3SJomo     /// 选项
82*03746da3SJomo     pub options: HashMap<CmdOption, String>,
83*03746da3SJomo }
84*03746da3SJomo 
85*03746da3SJomo /// passwd命令
86*03746da3SJomo #[derive(Debug)]
87*03746da3SJomo pub struct PasswdCommand {
88*03746da3SJomo     pub username: Option<String>,
89*03746da3SJomo }
90*03746da3SJomo 
91*03746da3SJomo /// groupadd/groupdel/groupmod命令
92*03746da3SJomo #[derive(Debug)]
93*03746da3SJomo pub struct GroupCommand {
94*03746da3SJomo     pub groupname: String,
95*03746da3SJomo     pub options: HashMap<CmdOption, String>,
96*03746da3SJomo }
97