func renderGTLDMap(writer io.Writer) error {
	// Get all of ICANN's gTLDs including ones that haven't been delegated.
	allGTLDs, err := getGTLDData()
	if err != nil {
		return err
	}

	// Filter out the non-delegated gTLD entries
	delegatedGTLDs := delegatedGTLDs(allGTLDs)

	// Validate that all of the delegated gTLDs have correct dates
	if err := validateGTLDs(delegatedGTLDs); err != nil {
		return err
	}

	// Get all of the TLDs. This data source doesn't provide delegationDates and
	// so we only want to use it to populate missing entries in `delegatedGTLDs`,
	// not to replace any existing entries that have more specific information
	// about the validity period for the TLD.
	allTLDs, err := getTLDData()
	if err != nil {
		return err
	}

	tldMap := make(map[string]util.GTLDPeriod)

	// Deduplicate delegatedGTLDs into the tldMap first
	for _, tld := range delegatedGTLDs {
		tldMap[tld.GTLD] = tld
	}

	// Then populate any missing entries from the allTLDs list
	for _, tld := range allTLDs {
		if _, found := tldMap[tld.GTLD]; !found {
			tldMap[tld.GTLD] = tld
		}
	}

	templateData := struct {
		GTLDs map[string]util.GTLDPeriod
	}{
		GTLDs: tldMap,
	}

	// Render the gTLD map to a buffer with the delegated gTLD data
	var buf bytes.Buffer
	if err := gTLDMapTemplate.Execute(&buf, templateData); err != nil {
		return err
	}

	// format the buffer so it won't trip up the `gofmt_test.go` checks
	formatted, err := format.Source(buf.Bytes())
	if err != nil {
		return err
	}

	// Write the formatted buffer to the writer
	_, err = writer.Write(formatted)
	if err != nil {
		return err
	}
	return nil
}
func renderGTLDMap(writer io.Writer) error {
	
	allGTLDs, err := getGTLDData()
	if err != nil {
		return err
	}

	
	delegatedGTLDs := delegatedGTLDs(allGTLDs)

	
	if err := validateGTLDs(delegatedGTLDs); err != nil {
		return err
	}

	
	
	
	
	allTLDs, err := getTLDData()
	if err != nil {
		return err
	}

	tldMap := make(map[string]util.GTLDPeriod)

	
	for _, tld := range delegatedGTLDs {
		tldMap[tld.GTLD] = tld
	}

	
	for _, tld := range allTLDs {
		if _, found := tldMap[tld.GTLD]; !found {
			tldMap[tld.GTLD] = tld
		}
	}

	templateData := struct {
		GTLDs map[string]util.GTLDPeriod
	}{
		GTLDs: tldMap,
	}

	
	var buf bytes.Buffer
	if err := gTLDMapTemplate.Execute(&buf, templateData); err != nil {
		return err
	}

	
	formatted, err := format.Source(buf.Bytes())
	if err != nil {
		return err
	}

	
	_, err = writer.Write(formatted)
	if err != nil {
		return err
	}
	return nil
}
func renderGTLDMap ( writer io . Writer ) error { // Get all of ICANN's gTLDs including ones that haven't been delegated. allGTLDs , err := getGTLDData ( ) if err != nil { return err } // Filter out the non-delegated gTLD entries delegatedGTLDs := delegatedGTLDs ( allGTLDs ) // Validate that all of the delegated gTLDs have correct dates if err := validateGTLDs ( delegatedGTLDs ) ; err != nil { return err } // Get all of the TLDs. This data source doesn't provide delegationDates and // so we only want to use it to populate missing entries in `delegatedGTLDs`, // not to replace any existing entries that have more specific information // about the validity period for the TLD. allTLDs , err := getTLDData ( ) if err != nil { return err } tldMap := make ( map [ string ] util . GTLDPeriod ) // Deduplicate delegatedGTLDs into the tldMap first for _ , tld := range delegatedGTLDs { tldMap [ tld . GTLD ] = tld } // Then populate any missing entries from the allTLDs list for _ , tld := range allTLDs { if _ , found := tldMap [ tld . GTLD ] ; ! found { tldMap [ tld . GTLD ] = tld } } templateData := struct { GTLDs map [ string ] util . GTLDPeriod } { GTLDs : tldMap , } // Render the gTLD map to a buffer with the delegated gTLD data var buf bytes . Buffer if err := gTLDMapTemplate . Execute ( & buf , templateData ) ; err != nil { return err } // format the buffer so it won't trip up the `gofmt_test.go` checks formatted , err := format . Source ( buf . Bytes ( ) ) if err != nil { return err } // Write the formatted buffer to the writer _ , err = writer . Write ( formatted ) if err != nil { return err } return nil }
// renderGTLDMap fetches the ICANN gTLD data, filters out undelegated entries,
// validates the remaining entries have parseable dates, and renders the
// gTLDMapTemplate to the provided writer using the validated entries (or
// returns an error if any of the aforementioned steps fail). It then fetches
// the ICANN TLD data, and uses it to populate any missing entries for ccTLDs.
// These entries will have a default delegationDate because the data source is
// not specific enough to provide one. The produced output text is a Golang
// source code file in the `util` package that contains a single map variable
// containing GTLDPeriod objects created with the ICANN data.
renderGTLDMap fetches the ICANN gTLD data filters out undelegated entries validates the remaining entries have parseable dates and renders the gTLDMapTemplate to the provided writer using the validated entries ( or returns an error if any of the aforementioned steps fail ) . It then fetches the ICANN TLD data and uses it to populate any missing entries for ccTLDs . These entries will have a default delegationDate because the data source is not specific enough to provide one . The produced output text is a Golang source code file in the util package that contains a single map variable containing GTLDPeriod objects created with the ICANN data .