package rc import ( "embed" "path" "strings" "go.stargrave.org/godlighty" ) const MIMEDir = "mime" var ( //go:embed mime mimes embed.FS ) type MIMEEntry struct { ext string mediaType string compressible bool } func parseMIME(p string) []MIMEEntry { tsv, err := mimes.ReadFile(path.Join(MIMEDir, p)) if err != nil { panic(err) } entries := make([]MIMEEntry, 0) for _, line := range strings.Split(string(tsv), "\n") { if len(line) == 0 || line[0] == '#' { continue } cols := strings.Split(line, "\t") entry := MIMEEntry{ext: cols[0], mediaType: cols[1]} if len(cols) > 2 && cols[2] == "c" { entry.compressible = true } entries = append(entries, entry) } return entries } func init() { entries, err := mimes.ReadDir(MIMEDir) if err != nil { panic(err) } for _, entry := range entries { bundle := entry.Name() for _, e := range parseMIME(bundle) { godlighty.ContentTypes[e.ext] = e.mediaType if e.compressible { godlighty.CompressibleContentTypes[e.mediaType] = struct{}{} } } } }