@@ -3,7 +3,6 @@ package main
3
3
import (
4
4
"bytes"
5
5
"compress/gzip"
6
- "encoding/base64"
7
6
"encoding/binary"
8
7
"fmt"
9
8
"math"
@@ -19,6 +18,8 @@ import (
19
18
"google.golang.org/protobuf/proto"
20
19
)
21
20
21
+ const distPath = "data"
22
+
22
23
func main () {
23
24
if err := buildMetadata (); err != nil {
24
25
fmt .Fprintln (os .Stderr , err )
@@ -35,39 +36,39 @@ func buildMetadata() error {
35
36
36
37
fmt .Print ("OK\n Building number metadata..." )
37
38
38
- metadata , err := buildNumberMetadata ("resources/PhoneNumberMetadata.xml" , "NumberData" , "metadata_bin.go " , false )
39
+ metadata , err := buildNumberMetadata ("resources/PhoneNumberMetadata.xml" , "NumberData" , "metadata.xml.gz " , false )
39
40
if err != nil {
40
41
return err
41
42
}
42
43
43
44
fmt .Print ("OK\n Building short number metadata..." )
44
45
45
- _ , err = buildNumberMetadata ("resources/ShortNumberMetadata.xml" , "ShortNumberData" , "shortnumber_metadata_bin.go " , true )
46
+ _ , err = buildNumberMetadata ("resources/ShortNumberMetadata.xml" , "ShortNumberData" , "shortnumber_metadata.xml.gz " , true )
46
47
if err != nil {
47
48
return err
48
49
}
49
50
50
51
fmt .Print ("OK\n Building region metadata..." )
51
52
52
- if err := buildRegionMetadata (metadata , "RegionData" , "countrycode_to_region_bin.go " ); err != nil {
53
+ if err := buildRegionMetadata (metadata , "RegionData" , "countrycode_to_region.xml.gz " ); err != nil {
53
54
return err
54
55
}
55
56
56
57
fmt .Print ("OK\n Building timezone metadata..." )
57
58
58
- if err := buildTimezoneMetadata ("resources/timezones/map_data.txt" , "TimezoneData" , "prefix_to_timezone_bin.go " ); err != nil {
59
+ if err := buildTimezoneMetadata ("resources/timezones/map_data.txt" , "TimezoneData" , "prefix_to_timezone.xml.gz " ); err != nil {
59
60
return err
60
61
}
61
62
62
63
fmt .Println ("OK\n Building carrier prefix metadata..." )
63
64
64
- if err := buildPrefixMetadata ("resources/carrier" , "CarrierData" , "prefix_to_carriers_bin.go " ); err != nil {
65
+ if err := buildPrefixMetadata ("resources/carrier" , "CarrierData" , "prefix_to_carriers " ); err != nil {
65
66
return err
66
67
}
67
68
68
69
fmt .Println ("Building geographic prefix metadata..." )
69
70
70
- if err := buildPrefixMetadata ("resources/geocoding" , "GeocodingData" , "prefix_to_geocodings_bin.go " ); err != nil {
71
+ if err := buildPrefixMetadata ("resources/geocoding" , "GeocodingData" , "prefix_to_geocodings " ); err != nil {
71
72
return err
72
73
}
73
74
@@ -101,7 +102,7 @@ func buildNumberMetadata(srcFile, varName, dstFile string, short bool) (*phonenu
101
102
return nil , fmt .Errorf ("error marshaling metadata as protobuf: %w" , err )
102
103
}
103
104
104
- if err := os .WriteFile ("gen /"+ dstFile , generateBinFile (varName , data ), os .FileMode (0664 )); err != nil {
105
+ if err := os .WriteFile (distPath + " /"+ dstFile , generateBinFile (varName , data ), os .FileMode (0664 )); err != nil {
105
106
return nil , fmt .Errorf ("error writing %s: %w" , dstFile , err )
106
107
}
107
108
@@ -117,7 +118,7 @@ func buildRegionMetadata(metadata *phonenumbers.PhoneMetadataCollection, varName
117
118
return fmt .Errorf ("error generating %s: %w" , dstFile , err )
118
119
}
119
120
120
- if err := os .WriteFile ("gen /"+ dstFile , generateBinFile (varName , data ), os .FileMode (0664 )); err != nil {
121
+ if err := os .WriteFile (distPath + " /"+ dstFile , generateBinFile (varName , data ), os .FileMode (0664 )); err != nil {
121
122
return fmt .Errorf ("error writing %s: %w" , dstFile , err )
122
123
}
123
124
@@ -165,16 +166,21 @@ func buildTimezoneMetadata(srcFile, varName, dstFile string) error {
165
166
return fmt .Errorf ("error generating %s: %w" , dstFile , err )
166
167
}
167
168
168
- if err := os .WriteFile ("gen /"+ dstFile , generateBinFile (varName , data ), os .FileMode (0664 )); err != nil {
169
+ if err := os .WriteFile (distPath + " /"+ dstFile , generateBinFile (varName , data ), os .FileMode (0664 )); err != nil {
169
170
return fmt .Errorf ("error writing %s: %w" , dstFile , err )
170
171
}
171
172
172
173
return nil
173
174
}
174
175
175
- func buildPrefixMetadata (srcDir , varName , dstFile string ) error {
176
+ func buildPrefixMetadata (srcDir , varName , dstDir string ) error {
176
177
// get our top level language directories
177
- dirs , err := filepath .Glob (fmt .Sprintf ("_build/%s/*" , srcDir ))
178
+ dirs , err := filepath .Glob (filepath .Join ("_build" , srcDir , "*" ))
179
+ if err != nil {
180
+ return err
181
+ }
182
+
183
+ err = os .MkdirAll (distPath + "/" + dstDir , os .ModePerm )
178
184
if err != nil {
179
185
return err
180
186
}
@@ -197,10 +203,6 @@ func buildPrefixMetadata(srcDir, varName, dstFile string) error {
197
203
languageMappings [filepath .Base (dir )] = mappings
198
204
}
199
205
200
- output := bytes.Buffer {}
201
- output .WriteString ("package gen\n \n " )
202
- output .WriteString (fmt .Sprintf ("var %s = map[string]string {\n " , varName ))
203
-
204
206
langs := maps .Keys (languageMappings )
205
207
sort .Strings (langs )
206
208
@@ -275,20 +277,14 @@ func buildPrefixMetadata(srcDir, varName, dstFile string) error {
275
277
276
278
var compressed bytes.Buffer
277
279
w := gzip .NewWriter (& compressed )
278
- w .Write (data .Bytes ())
280
+ if _ , err := w .Write (data .Bytes ()); err != nil {
281
+ return err
282
+ }
279
283
w .Close ()
280
- c := base64 .StdEncoding .EncodeToString (compressed .Bytes ())
281
- output .WriteString ("\t " )
282
- output .WriteString (strconv .Quote (lang ))
283
- output .WriteString (": " )
284
- output .WriteString (strconv .Quote (c ))
285
- output .WriteString (",\n " )
286
- }
287
-
288
- output .WriteString ("}" )
289
284
290
- if err := os .WriteFile ("gen/" + dstFile , output .Bytes (), os .FileMode (0664 )); err != nil {
291
- return fmt .Errorf ("error writing %s: %w" , dstFile , err )
285
+ if err := os .WriteFile (distPath + "/" + dstDir + "/" + lang + ".txt.gz" , compressed .Bytes (), os .FileMode (0664 )); err != nil {
286
+ return fmt .Errorf ("error writing %s: %w" , dstDir , err )
287
+ }
292
288
}
293
289
294
290
return nil
@@ -374,18 +370,8 @@ func generateBinFile(varName string, data []byte) []byte {
374
370
w := gzip .NewWriter (& compressed )
375
371
w .Write (data )
376
372
w .Close ()
377
- encoded := base64 .StdEncoding .EncodeToString (compressed .Bytes ())
378
-
379
- // create our output
380
- output := & bytes.Buffer {}
381
-
382
- // write our header
383
- output .WriteString ("package gen\n \n var " )
384
- output .WriteString (varName )
385
- output .WriteString (" = " )
386
- output .WriteString (strconv .Quote (string (encoded )))
387
- output .WriteString ("\n " )
388
- return output .Bytes ()
373
+
374
+ return compressed .Bytes ()
389
375
}
390
376
391
377
func readMappingsForDir (dir string ) (map [int ]string , error ) {
0 commit comments