@@ -4,14 +4,41 @@ use std::{
4
4
io:: { self , BufWriter , Write } ,
5
5
path:: Path ,
6
6
} ;
7
- use temporal_provider:: IanaIdentifierNormalizer ;
7
+ use temporal_provider:: { tzif :: ZoneInfoProvider , IanaIdentifierNormalizer } ;
8
8
9
9
trait BakedDataProvider {
10
10
fn write_data ( & self , data_path : & Path ) -> io:: Result < ( ) > ;
11
11
12
12
fn write_debug ( & self , debug_path : & Path ) -> io:: Result < ( ) > ;
13
13
}
14
14
15
+ impl BakedDataProvider for ZoneInfoProvider < ' _ > {
16
+ fn write_data ( & self , data_path : & Path ) -> io:: Result < ( ) > {
17
+ fs:: create_dir_all ( data_path) ?;
18
+ let generated_file = data_path. join ( "zone_info_provider.rs.data" ) ;
19
+ let baked = self . bake ( & Default :: default ( ) ) ;
20
+
21
+ let baked_macro = quote ! {
22
+ #[ macro_export]
23
+ macro_rules! zone_info_provider {
24
+ ( ) => {
25
+ pub const ZONE_INFO_PROVIDER : & ' static temporal_provider:: ZoneInfoProvider = & #baked;
26
+ }
27
+ }
28
+ } ;
29
+ let generated = baked_macro. to_string ( ) ;
30
+ let mut file = BufWriter :: new ( File :: create ( generated_file) ?) ;
31
+ write ! ( file, "//@generated\n \n {generated}" )
32
+ }
33
+
34
+ fn write_debug ( & self , debug_path : & Path ) -> io:: Result < ( ) > {
35
+ fs:: create_dir_all ( debug_path) ?;
36
+ let debug_filename = debug_path. join ( "zone_info_provider.json" ) ;
37
+ let json = serde_json:: to_string_pretty ( self ) . unwrap ( ) ;
38
+ fs:: write ( debug_filename, json)
39
+ }
40
+ }
41
+
15
42
impl BakedDataProvider for IanaIdentifierNormalizer < ' _ > {
16
43
fn write_data ( & self , data_path : & Path ) -> io:: Result < ( ) > {
17
44
fs:: create_dir_all ( data_path) ?;
@@ -58,8 +85,16 @@ fn main() -> io::Result<()> {
58
85
. parent ( )
59
86
. unwrap ( )
60
87
. join ( "provider/src" ) ;
88
+
89
+ // Write idenitifiers
61
90
write_data_file_with_debug (
62
91
& provider. join ( "data" ) ,
63
92
& IanaIdentifierNormalizer :: build ( & tzdata_dir) . unwrap ( ) ,
93
+ ) ?;
94
+
95
+ // Write tzif data
96
+ write_data_file_with_debug (
97
+ & provider. join ( "data" ) ,
98
+ & ZoneInfoProvider :: build ( & tzdata_dir) . unwrap ( ) ,
64
99
)
65
100
}
0 commit comments