bangs/scripts/includebangs.go

52 lines
1.2 KiB
Go
Raw Permalink Normal View History

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