@@ -15,6 +15,8 @@ use zoneinfo_parse::table::{Table, TableBuilder};
15
15
use zoneinfo_parse:: structure:: { Structure , Child } ;
16
16
use zoneinfo_parse:: transitions:: { TableTransitions } ;
17
17
18
+ use phf_codegen:: Map as PHFMap ;
19
+
18
20
use errors:: { Error , ParseError } ;
19
21
20
22
@@ -164,13 +166,16 @@ impl DataCrate {
164
166
}
165
167
166
168
try!( writeln ! ( base_w, "\n \n " ) ) ;
167
- try!( writeln ! ( base_w, "pub fn lookup(input: &str) -> Option<&'static StaticTimeZone<'static>> {{" ) ) ;
169
+ try!( write ! ( base_w, "static ZONES: phf::Map<&'static str, &'static StaticTimeZone<'static>> = " ) ) ;
170
+
171
+ let mut phf_map = PHFMap :: new ( ) ;
168
172
for name in & keys {
169
- try!( writeln ! ( base_w, " if input == {:?} {{" , name) ) ;
170
- try!( writeln ! ( base_w, " return Some(&{});" , sanitise_name( name) . replace( "/" , "::" ) ) ) ;
171
- try!( writeln ! ( base_w, " }}" ) ) ;
173
+ phf_map. entry ( & * * * name, & format ! ( "&{}" , sanitise_name( name) . replace( "/" , "::" ) ) ) ;
172
174
}
173
- try!( writeln ! ( base_w, " return None;" ) ) ;
175
+ try!( phf_map. build ( & mut base_w) ) ;
176
+
177
+ try!( writeln ! ( base_w, ";\n \n pub fn lookup(input: &str) -> Option<&'static StaticTimeZone<'static>> {{" ) ) ;
178
+ try!( writeln ! ( base_w, " ZONES.get(input).cloned()" ) ) ;
174
179
try!( writeln ! ( base_w, "}}" ) ) ;
175
180
176
181
Ok ( ( ) )
@@ -244,4 +249,5 @@ use datetime::zone::{StaticTimeZone, FixedTimespanSet, FixedTimespan};
244
249
/// The imports needed for a `mod.rs` file.
245
250
const MOD_HEADER : & ' static str = r##"
246
251
use datetime::zone::StaticTimeZone;
252
+ use phf;
247
253
"## ;
0 commit comments