1 // Copyright (c) 2017, Shreyas Khare <skhare@rapid7.com>
2 // See LICENSE for licensing information
15 const path = "schemes.go"
17 var schemesTmpl = template.Must(template.New("schemes").Parse(`// Generated by schemesgen
21 // Schemes is a sorted list of all IANA assigned schemes.
24 // https://www.iana.org/assignments/uri-schemes/uri-schemes-1.csv
25 var Schemes = []string{
26 {{range $scheme := .Schemes}}` + "\t`" + `{{$scheme}}` + "`" + `,
30 func schemeList() []string {
31 resp, err := http.Get("https://www.iana.org/assignments/uri-schemes/uri-schemes-1.csv")
35 defer resp.Body.Close()
36 r := csv.NewReader(resp.Body)
37 r.Read() // ignore headers
38 schemes := make([]string, 0)
40 record, err := r.Read()
47 schemes = append(schemes, record[0])
52 func writeSchemes(schemes []string) error {
53 f, err := os.Create(path)
58 return schemesTmpl.Execute(f, struct {
66 schemes := schemeList()
67 log.Printf("Generating %s...", path)
68 if err := writeSchemes(schemes); err != nil {
69 log.Fatalf("Could not write path: %v", err)