| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- // Copyright 2018 The go-ethereum Authors
- // This file is part of go-ethereum.
- //
- // go-ethereum is free software: you can redistribute it and/or modify
- // it under the terms of the GNU General Public License as published by
- // the Free Software Foundation, either version 3 of the License, or
- // (at your option) any later version.
- //
- // go-ethereum is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- // GNU General Public License for more details.
- //
- // You should have received a copy of the GNU General Public License
- // along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
- package main
- // Standard "mime" package rely on system-settings, see mime.osInitMime
- // Swarm will run on many OS/Platform/Docker and must behave similar
- // This command generates code to add common mime types based on mime.types file
- //
- // mime.types file provided by mailcap, which follow https://www.iana.org/assignments/media-types/media-types.xhtml
- //
- // Get last version of mime.types file by:
- // docker run --rm -v $(pwd):/tmp alpine:edge /bin/sh -c "apk add -U mailcap; mv /etc/mime.types /tmp"
- import (
- "bufio"
- "bytes"
- "flag"
- "html/template"
- "io/ioutil"
- "strings"
- "log"
- )
- var (
- typesFlag = flag.String("types", "", "Input mime.types file")
- packageFlag = flag.String("package", "", "Golang package in output file")
- outFlag = flag.String("out", "", "Output file name for the generated mime types")
- )
- type mime struct {
- Name string
- Exts []string
- }
- type templateParams struct {
- PackageName string
- Mimes []mime
- }
- func main() {
- // Parse and ensure all needed inputs are specified
- flag.Parse()
- if *typesFlag == "" {
- log.Fatalf("--types is required")
- }
- if *packageFlag == "" {
- log.Fatalf("--types is required")
- }
- if *outFlag == "" {
- log.Fatalf("--out is required")
- }
- params := templateParams{
- PackageName: *packageFlag,
- }
- types, err := ioutil.ReadFile(*typesFlag)
- if err != nil {
- log.Fatal(err)
- }
- scanner := bufio.NewScanner(bytes.NewReader(types))
- for scanner.Scan() {
- txt := scanner.Text()
- if strings.HasPrefix(txt, "#") || len(txt) == 0 {
- continue
- }
- parts := strings.Fields(txt)
- if len(parts) == 1 {
- continue
- }
- params.Mimes = append(params.Mimes, mime{parts[0], parts[1:]})
- }
- if err = scanner.Err(); err != nil {
- log.Fatal(err)
- }
- result := bytes.NewBuffer([]byte{})
- if err := template.Must(template.New("_").Parse(tpl)).Execute(result, params); err != nil {
- log.Fatal(err)
- }
- if err := ioutil.WriteFile(*outFlag, result.Bytes(), 0600); err != nil {
- log.Fatal(err)
- }
- }
- var tpl = `// Code generated by github.com/ethereum/go-ethereum/cmd/swarm/mimegen. DO NOT EDIT.
- package {{ .PackageName }}
- import "mime"
- func init() {
- var mimeTypes = map[string]string{
- {{- range .Mimes -}}
- {{ $name := .Name -}}
- {{- range .Exts }}
- ".{{ . }}": "{{ $name | html }}",
- {{- end }}
- {{- end }}
- }
- for ext, name := range mimeTypes {
- if err := mime.AddExtensionType(ext, name); err != nil {
- panic(err)
- }
- }
- }
- `
|