1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
use TokenStream;
extern crate proc_macro;
use *;
use *;
use *;
/// `#[command]` 用于申明并实现一个`命令`.
///
/// # Example:
/// ---
/// ```rust,ignore
/// // cmds.rs
/// use aslip::command;
///
/// /// 函数的文档注释的第一行会用作这个命令的一语句话说明,会显示在 cli 默认打印的 help 信息里。
/// /// 函数的完整文档会用作这个命令的 quick help,在 `app no_arg_action -h` 时显示。
/// /// Usage: app no_arg_action
/// #[command]
/// pub fn no_arg_action() {
/// println!("I'm no_arg_action, happy to see you.");
/// }
///
/// /// 只有一个一个参数 的命令。
/// /// Usage: app one_arg <PATH>
/// ///
/// /// <green!>Args</>:
/// /// <PATH>: the file path.
/// /// Options:
/// /// -h print this message.
/// #[command]
/// pub fn one_arg(path: String) {
/// println!(
/// "one_arg I'm one_arg, happy to see you.\n your input is: {:?}",
/// path
/// );
/// }
///
/// /// Vec<T> 类型只能作为最后一个参数。
/// #[command]
/// pub fn collection_arg(first: u8, last: Vec<u8>) {
/// println!("your input is: {:?} {:?}", first, last);
/// }
///
/// #[command] 也可以通过 macro args 来做一些设置。
/// #[command] macro 已经支持的参数有:
///
/// name 命令的实际命令名称。 如果没有设置,则默认使用 函数的名称 作为 命令名称。
/// short 命令的短名称,通常是命令名称的第一个字母。
///
/// #[command(name = "true_name", short = "s")]
/// fn fake_name(){
/// }
/// ```
///
/// ---
/// ```rust,ignore
/// // main.rs
/// use aslip;
/// fn main() {
/// let app = aslip::app::App::new().about("description");
///
/// aslip::run!(app);
///
/// }
/// ```
/// ```rust,ignore
/// fn run()
/// fn run(app: aslip::App)
/// ```
/// # Exampel:
/// ```rust,ignore
///
/// // cmds.rs
/// use aslip::command;
///
/// #[command]
/// 没有参数的命令。
/// pub fn no_arg_action() {
/// println!("I'm no_arg_action, happy to see you.");
/// }
///
/// #[command]
/// 只有一个参数的命令
/// pub fn one_arg(path: String) {
/// println!(
/// "one_arg I'm one_arg, happy to see you.\n your input is: {:?}",
/// path
/// );
/// }
///
/// #[command]
/// /// Vec 类型只能作为最后一个参数。
/// pub fn collection_arg(first: u8, last: Vec<u8>) {
/// println!("your input is: {:?} {:?}", first, last);
/// }
/// ```
///
///
/// ```rust,ignore
/// // main.rs
/// use aslip;
/// fn main() {
/// let mut app = aslip::app::App::new().about("description");
///
/// aslip::run!(app);
///
/// }
/// ```