66 lines
1.2 KiB
Go
66 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
"os"
|
|
"os/exec"
|
|
)
|
|
|
|
type MimeType struct {
|
|
Source string `json:"source"`
|
|
Extensions []string `json:"extensions"`
|
|
Compressible bool `json:"compressible"`
|
|
Charset string `json:"charset"`
|
|
}
|
|
|
|
type Data map[string]MimeType
|
|
|
|
func main() {
|
|
out, err := os.OpenFile("generated_mime_types.go", os.O_RDWR|os.O_CREATE, 0644)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
defer out.Close()
|
|
|
|
rsp, err := http.Get("https://cdn.rawgit.com/jshttp/mime-db/v1.33.0/db.json")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
if rsp.StatusCode != http.StatusOK {
|
|
panic(rsp)
|
|
}
|
|
|
|
var result Data
|
|
|
|
if err := json.NewDecoder(rsp.Body).Decode(&result); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
fmt.Fprintln(out, "package mimedb")
|
|
fmt.Fprintln(out, "")
|
|
fmt.Fprintln(out, "var (")
|
|
fmt.Fprintln(out, " mimeTypeToExts = map[string][]string{")
|
|
|
|
for mimeType, entry := range result {
|
|
if len(entry.Extensions) > 0 {
|
|
fmt.Fprintf(out, " %q: %#v,\n", mimeType, entry.Extensions)
|
|
}
|
|
}
|
|
|
|
fmt.Fprintln(out, " }")
|
|
fmt.Fprintln(out, ")")
|
|
|
|
if err := out.Close(); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
// run `go fmt` on the output
|
|
if err := exec.Command("go", "fmt").Run(); err != nil {
|
|
panic(err)
|
|
}
|
|
}
|