func buildTimezoneMetadata()

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
}