in cmd/buildmetadata/main.go [127:173]
func buildTimezoneMetadata(srcFile, varName, dstFile string) error {
body, err := os.ReadFile("_build/" + srcFile)
if err != nil {
return fmt.Errorf("error reading %s: %w", srcFile, err)
}
// build our map of prefix to timezones
prefixMap := make(map[int][]string)
for _, line := range strings.Split(string(body), "\n") {
if strings.HasPrefix(line, "#") {
continue
}
if strings.TrimSpace(line) == "" {
continue
}
fields := strings.Split(line, "|")
if len(fields) != 2 {
return fmt.Errorf("invalid format in timezone file: %s", line)
}
zones := strings.Split(fields[1], "&")
if len(zones) < 1 {
return fmt.Errorf("invalid format in timezone file: %s", line)
}
// parse our prefix
prefix, err := strconv.Atoi(fields[0])
if err != nil {
return fmt.Errorf("invalid prefix in line: %s", line)
}
prefixMap[prefix] = zones
}
// generate our map data
data, err := renderMap(prefixMap)
if err != nil {
return fmt.Errorf("error generating %s: %w", dstFile, err)
}
if err := os.WriteFile("gen/"+dstFile, generateBinFile(varName, data), os.FileMode(0664)); err != nil {
return fmt.Errorf("error writing %s: %w", dstFile, err)
}
return nil
}