File tree Expand file tree Collapse file tree 1 file changed +53
-3
lines changed Expand file tree Collapse file tree 1 file changed +53
-3
lines changed Original file line number Diff line number Diff line change 1
- use cuid:: cuid;
2
- use std:: process:: exit;
1
+ use cuid:: { cuid, slug} ;
2
+ use std:: {
3
+ env:: { self , Args } ,
4
+ process:: exit,
5
+ } ;
3
6
4
7
/// Generate a new CUID and print it to stdout
5
8
pub fn main ( ) {
6
- match cuid ( ) {
9
+ let args: CuidArgs = env:: args ( ) . into ( ) ;
10
+
11
+ let res = if args. slug { slug ( ) } else { cuid ( ) } ;
12
+
13
+ match res {
7
14
Ok ( id) => println ! ( "{}" , id) ,
8
15
Err ( err) => {
9
16
eprintln ! ( "{:?}" , err) ;
10
17
exit ( 1 )
11
18
}
12
19
}
13
20
}
21
+
22
+ const HELP : & ' static str = r#"Usage: cuid [OPTION]...
23
+ Generate and print a CUID.
24
+
25
+ Options:
26
+ --slug generate a slug instead of a full CUID
27
+ -h, --help display this help and exit
28
+ -v, --version display version information and exit"# ;
29
+
30
+ const VERSION : & ' static str = env ! ( "CARGO_PKG_VERSION" ) ;
31
+
32
+ /// Commandline arguments for the CUID binary
33
+ #[ derive( Debug ) ]
34
+ struct CuidArgs {
35
+ /// Whether to produce a slug instead of a CUID
36
+ slug : bool ,
37
+ }
38
+ impl From < Args > for CuidArgs {
39
+ fn from ( args : Args ) -> Self {
40
+ let mut slug = false ;
41
+
42
+ // The first argument should be the binary name. Skip it.
43
+ args. skip ( 1 ) . for_each ( |arg| match arg. as_str ( ) {
44
+ "-h" | "--help" => {
45
+ println ! ( "{}" , HELP ) ;
46
+ exit ( 0 ) ;
47
+ }
48
+ "-v" | "--version" => {
49
+ println ! ( "{}" , VERSION ) ;
50
+ exit ( 0 ) ;
51
+ }
52
+ "--slug" => slug = true ,
53
+ _ => {
54
+ println ! ( "error: unrecognized argument {}" , arg) ;
55
+ println ! ( "" ) ;
56
+ println ! ( "{}" , HELP ) ;
57
+ exit ( 1 ) ;
58
+ }
59
+ } ) ;
60
+
61
+ CuidArgs { slug }
62
+ }
63
+ }
You can’t perform that action at this time.
0 commit comments