@@ -12,9 +12,9 @@ pub fn main() {
1212 println ! ( "cargo:rustc-cfg=build={:?}" , profile) ;
1313 }
1414
15- let env_feature_prefix : & str = "CARGO_FEATURE_" ;
16- let feature_prefix : & str = "feat_" ;
17- let override_prefix : & str = "uu_" ;
15+ const ENV_FEATURE_PREFIX : & str = "CARGO_FEATURE_" ;
16+ const FEATURE_PREFIX : & str = "feat_" ;
17+ const OVERRIDE_PREFIX : & str = "uu_" ;
1818
1919 let out_dir = env:: var ( "OUT_DIR" ) . unwrap ( ) ;
2020 // println!("cargo:warning=out_dir={}", out_dir);
@@ -25,16 +25,16 @@ pub fn main() {
2525
2626 let mut crates = Vec :: new ( ) ;
2727 for ( key, val) in env:: vars ( ) {
28- if val == "1" && key. starts_with ( env_feature_prefix ) {
29- let krate = key[ env_feature_prefix . len ( ) ..] . to_lowercase ( ) ;
28+ if val == "1" && key. starts_with ( ENV_FEATURE_PREFIX ) {
29+ let krate = key[ ENV_FEATURE_PREFIX . len ( ) ..] . to_lowercase ( ) ;
3030 match krate. as_ref ( ) {
3131 "default" | "macos" | "unix" | "windows" | "selinux" => continue , // common/standard feature names
3232 "nightly" | "test_unimplemented" => continue , // crate-local custom features
3333 "test" => continue , // over-ridden with 'uu_test' to avoid collision with rust core crate 'test'
34- s if s. starts_with ( feature_prefix ) => continue , // crate feature sets
34+ s if s. starts_with ( FEATURE_PREFIX ) => continue , // crate feature sets
3535 _ => { } // util feature name
3636 }
37- crates. push ( krate. to_string ( ) ) ;
37+ crates. push ( krate) ;
3838 }
3939 }
4040 crates. sort ( ) ;
@@ -43,33 +43,23 @@ pub fn main() {
4343 let mut tf = File :: create ( Path :: new ( & out_dir) . join ( "test_modules.rs" ) ) . unwrap ( ) ;
4444
4545 mf. write_all (
46- "type UtilityMap<T> = HashMap <&'static str, (fn(T) -> i32, fn() -> App<'static>)>;\n \
46+ "type UtilityMap<T> = phf::Map <&'static str, (fn(T) -> i32, fn() -> App<'static>)>;\n \
4747 \n \
48- fn util_map<T: uucore::Args>() -> UtilityMap<T> {\n \
49- \t #[allow(unused_mut)]\n \
50- \t #[allow(clippy::let_and_return)]\n \
51- \t let mut map = UtilityMap::new();\n \
52- "
53- . as_bytes ( ) ,
48+ fn util_map<T: uucore::Args>() -> UtilityMap<T> {\n "
49+ . as_bytes ( ) ,
5450 )
5551 . unwrap ( ) ;
5652
57- for krate in crates {
53+ let mut phf_map = phf_codegen:: Map :: < & str > :: new ( ) ;
54+ for krate in & crates {
55+ let map_value = format ! ( "({krate}::uumain, {krate}::uu_app)" , krate = krate) ;
5856 match krate. as_ref ( ) {
5957 // 'test' is named uu_test to avoid collision with rust core crate 'test'.
6058 // It can also be invoked by name '[' for the '[ expr ] syntax'.
6159 "uu_test" => {
62- mf. write_all (
63- format ! (
64- "\
65- \t map.insert(\" test\" , ({krate}::uumain, {krate}::uu_app));\n \
66- \t \t map.insert(\" [\" , ({krate}::uumain, {krate}::uu_app));\n \
67- ",
68- krate = krate
69- )
70- . as_bytes ( ) ,
71- )
72- . unwrap ( ) ;
60+ phf_map. entry ( "test" , & map_value) ;
61+ phf_map. entry ( "[" , & map_value) ;
62+
7363 tf. write_all (
7464 format ! (
7565 "#[path=\" {dir}/test_test.rs\" ]\n mod test_test;\n " ,
@@ -79,35 +69,23 @@ pub fn main() {
7969 )
8070 . unwrap ( )
8171 }
82- k if k. starts_with ( override_prefix) => {
83- mf. write_all (
84- format ! (
85- "\t map.insert(\" {k}\" , ({krate}::uumain, {krate}::uu_app));\n " ,
86- k = & krate[ override_prefix. len( ) ..] ,
87- krate = krate
88- )
89- . as_bytes ( ) ,
90- )
91- . unwrap ( ) ;
72+ k if k. starts_with ( OVERRIDE_PREFIX ) => {
73+ phf_map. entry ( & k[ OVERRIDE_PREFIX . len ( ) ..] , & map_value) ;
9274 tf. write_all (
9375 format ! (
9476 "#[path=\" {dir}/test_{k}.rs\" ]\n mod test_{k};\n " ,
95- k = & krate[ override_prefix . len( ) ..] ,
77+ k = & krate[ OVERRIDE_PREFIX . len( ) ..] ,
9678 dir = util_tests_dir,
9779 )
9880 . as_bytes ( ) ,
9981 )
10082 . unwrap ( )
10183 }
10284 "false" | "true" => {
103- mf. write_all (
104- format ! (
105- "\t map.insert(\" {krate}\" , (r#{krate}::uumain, r#{krate}::uu_app));\n " ,
106- krate = krate
107- )
108- . as_bytes ( ) ,
109- )
110- . unwrap ( ) ;
85+ phf_map. entry (
86+ krate,
87+ & format ! ( "(r#{krate}::uumain, r#{krate}::uu_app)" , krate = krate) ,
88+ ) ;
11189 tf. write_all (
11290 format ! (
11391 "#[path=\" {dir}/test_{krate}.rs\" ]\n mod test_{krate};\n " ,
@@ -119,29 +97,25 @@ pub fn main() {
11997 . unwrap ( )
12098 }
12199 "hashsum" => {
122- mf. write_all (
123- format ! (
124- "\
125- \t map.insert(\" {krate}\" , ({krate}::uumain, {krate}::uu_app_custom));\n \
126- \t \t map.insert(\" md5sum\" , ({krate}::uumain, {krate}::uu_app_common));\n \
127- \t \t map.insert(\" sha1sum\" , ({krate}::uumain, {krate}::uu_app_common));\n \
128- \t \t map.insert(\" sha224sum\" , ({krate}::uumain, {krate}::uu_app_common));\n \
129- \t \t map.insert(\" sha256sum\" , ({krate}::uumain, {krate}::uu_app_common));\n \
130- \t \t map.insert(\" sha384sum\" , ({krate}::uumain, {krate}::uu_app_common));\n \
131- \t \t map.insert(\" sha512sum\" , ({krate}::uumain, {krate}::uu_app_common));\n \
132- \t \t map.insert(\" sha3sum\" , ({krate}::uumain, {krate}::uu_app_common));\n \
133- \t \t map.insert(\" sha3-224sum\" , ({krate}::uumain, {krate}::uu_app_common));\n \
134- \t \t map.insert(\" sha3-256sum\" , ({krate}::uumain, {krate}::uu_app_common));\n \
135- \t \t map.insert(\" sha3-384sum\" , ({krate}::uumain, {krate}::uu_app_common));\n \
136- \t \t map.insert(\" sha3-512sum\" , ({krate}::uumain, {krate}::uu_app_common));\n \
137- \t \t map.insert(\" shake128sum\" , ({krate}::uumain, {krate}::uu_app_common));\n \
138- \t \t map.insert(\" shake256sum\" , ({krate}::uumain, {krate}::uu_app_common));\n \
139- ",
140- krate = krate
141- )
142- . as_bytes ( ) ,
143- )
144- . unwrap ( ) ;
100+ phf_map. entry (
101+ krate,
102+ & format ! ( "({krate}::uumain, {krate}::uu_app_custom)" , krate = krate) ,
103+ ) ;
104+
105+ let map_value = format ! ( "({krate}::uumain, {krate}::uu_app_common)" , krate = krate) ;
106+ phf_map. entry ( "md5sum" , & map_value) ;
107+ phf_map. entry ( "sha1sum" , & map_value) ;
108+ phf_map. entry ( "sha224sum" , & map_value) ;
109+ phf_map. entry ( "sha256sum" , & map_value) ;
110+ phf_map. entry ( "sha384sum" , & map_value) ;
111+ phf_map. entry ( "sha512sum" , & map_value) ;
112+ phf_map. entry ( "sha3sum" , & map_value) ;
113+ phf_map. entry ( "sha3-224sum" , & map_value) ;
114+ phf_map. entry ( "sha3-256sum" , & map_value) ;
115+ phf_map. entry ( "sha3-384sum" , & map_value) ;
116+ phf_map. entry ( "sha3-512sum" , & map_value) ;
117+ phf_map. entry ( "shake128sum" , & map_value) ;
118+ phf_map. entry ( "shake256sum" , & map_value) ;
145119 tf. write_all (
146120 format ! (
147121 "#[path=\" {dir}/test_{krate}.rs\" ]\n mod test_{krate};\n " ,
@@ -153,14 +127,7 @@ pub fn main() {
153127 . unwrap ( )
154128 }
155129 _ => {
156- mf. write_all (
157- format ! (
158- "\t map.insert(\" {krate}\" , ({krate}::uumain, {krate}::uu_app));\n " ,
159- krate = krate
160- )
161- . as_bytes ( ) ,
162- )
163- . unwrap ( ) ;
130+ phf_map. entry ( krate, & map_value) ;
164131 tf. write_all (
165132 format ! (
166133 "#[path=\" {dir}/test_{krate}.rs\" ]\n mod test_{krate};\n " ,
@@ -173,8 +140,8 @@ pub fn main() {
173140 }
174141 }
175142 }
176-
177- mf. write_all ( b"map \n }\n " ) . unwrap ( ) ;
143+ write ! ( mf , "{}" , phf_map . build ( ) ) . unwrap ( ) ;
144+ mf. write_all ( b"\n }\n " ) . unwrap ( ) ;
178145
179146 mf. flush ( ) . unwrap ( ) ;
180147 tf. flush ( ) . unwrap ( ) ;
0 commit comments