Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / mvdan.cc / xurls / v2@v2.2.0 / generate / schemesgen / main.go
1 // Copyright (c) 2017, Shreyas Khare <skhare@rapid7.com>
2 // See LICENSE for licensing information
3
4 package main
5
6 import (
7         "encoding/csv"
8         "io"
9         "log"
10         "net/http"
11         "os"
12         "text/template"
13 )
14
15 const path = "schemes.go"
16
17 var schemesTmpl = template.Must(template.New("schemes").Parse(`// Generated by schemesgen
18
19 package xurls
20
21 // Schemes is a sorted list of all IANA assigned schemes.
22 //
23 // Source:
24 //   https://www.iana.org/assignments/uri-schemes/uri-schemes-1.csv
25 var Schemes = []string{
26 {{range $scheme := .Schemes}}` + "\t`" + `{{$scheme}}` + "`" + `,
27 {{end}}}
28 `))
29
30 func schemeList() []string {
31         resp, err := http.Get("https://www.iana.org/assignments/uri-schemes/uri-schemes-1.csv")
32         if err != nil {
33                 log.Fatal(err)
34         }
35         defer resp.Body.Close()
36         r := csv.NewReader(resp.Body)
37         r.Read() // ignore headers
38         schemes := make([]string, 0)
39         for {
40                 record, err := r.Read()
41                 if err == io.EOF {
42                         break
43                 }
44                 if err != nil {
45                         log.Fatal(err)
46                 }
47                 schemes = append(schemes, record[0])
48         }
49         return schemes
50 }
51
52 func writeSchemes(schemes []string) error {
53         f, err := os.Create(path)
54         if err != nil {
55                 return err
56         }
57         defer f.Close()
58         return schemesTmpl.Execute(f, struct {
59                 Schemes []string
60         }{
61                 Schemes: schemes,
62         })
63 }
64
65 func main() {
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)
70         }
71 }