Files
go-mimedb/cmd/generate/main.go
2018-03-06 23:56:21 +00:00

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)
}
}