@@ -4,14 +4,41 @@ use std::{
44 io:: { self , BufWriter , Write } ,
55 path:: Path ,
66} ;
7- use temporal_provider:: IanaIdentifierNormalizer ;
7+ use temporal_provider:: { tzif :: ZoneInfoProvider , IanaIdentifierNormalizer } ;
88
99trait BakedDataProvider {
1010 fn write_data ( & self , data_path : & Path ) -> io:: Result < ( ) > ;
1111
1212 fn write_debug ( & self , debug_path : & Path ) -> io:: Result < ( ) > ;
1313}
1414
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+
1542impl BakedDataProvider for IanaIdentifierNormalizer < ' _ > {
1643 fn write_data ( & self , data_path : & Path ) -> io:: Result < ( ) > {
1744 fs:: create_dir_all ( data_path) ?;
@@ -58,8 +85,16 @@ fn main() -> io::Result<()> {
5885 . parent ( )
5986 . unwrap ( )
6087 . join ( "provider/src" ) ;
88+
89+ // Write idenitifiers
6190 write_data_file_with_debug (
6291 & provider. join ( "data" ) ,
6392 & 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 ( ) ,
6499 )
65100}
0 commit comments