52 lines
1.2 KiB
Go
52 lines
1.2 KiB
Go
|
package main
|
|||
|
|
|||
|
import (
|
|||
|
"fmt"
|
|||
|
"io/ioutil"
|
|||
|
"os"
|
|||
|
"sort"
|
|||
|
|
|||
|
"gopkg.in/yaml.v2"
|
|||
|
)
|
|||
|
|
|||
|
func loadBangs() (bangs map[string]string) {
|
|||
|
data, err := ioutil.ReadFile("../bangs.yml")
|
|||
|
if err != nil {
|
|||
|
panic(fmt.Sprintf("Failed to load bangs.yml: %v", err))
|
|||
|
}
|
|||
|
|
|||
|
err = yaml.Unmarshal(data, &bangs)
|
|||
|
if err != nil {
|
|||
|
panic(fmt.Sprintf("Failed to decode bangs: %v", err))
|
|||
|
}
|
|||
|
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
func main() {
|
|||
|
bangs := loadBangs()
|
|||
|
|
|||
|
// generating sorted keys to have stable generated code
|
|||
|
// this is not optimal, performance-wise but it runs only once at build
|
|||
|
// time, so it doesn’t matter that much)
|
|||
|
bangNames := []string{}
|
|||
|
for bang := range bangs {
|
|||
|
bangNames = append(bangNames, bang)
|
|||
|
}
|
|||
|
sort.Strings(bangNames)
|
|||
|
|
|||
|
out, err := os.Create("bangs.go")
|
|||
|
if err != nil {
|
|||
|
panic(fmt.Sprintf("Failed to create bangs.go: %v", err))
|
|||
|
}
|
|||
|
|
|||
|
out.Write([]byte("// Code generated from ../../bangs.yml DO NOT EDIT.\n"))
|
|||
|
out.Write([]byte("package main \n\nfunc getBang(name string) string {\n\tswitch name {\n"))
|
|||
|
|
|||
|
for _, bangName := range bangNames {
|
|||
|
out.Write([]byte("\t\tcase `" + bangName + "`: return `" + bangs[bangName] + "`\n"))
|
|||
|
}
|
|||
|
out.Write([]byte("\t\tdefault: return \"\"\n"))
|
|||
|
out.Write([]byte("\t}\n}\n"))
|
|||
|
}
|