github.com/avenga/couper@v1.12.2/assets/generate/generate.go (about) 1 package main 2 3 import ( 4 "bytes" 5 "errors" 6 "fmt" 7 "io" 8 "net/http" 9 "os" 10 "path" 11 "sort" 12 ) 13 14 type StringBuffer struct { 15 buf *bytes.Buffer 16 } 17 18 func (sb *StringBuffer) String() string { 19 result := "[]byte{" 20 for i, b := range sb.buf.Bytes() { 21 if i != sb.buf.Len()-1 { 22 result += fmt.Sprintf("%d, ", b) 23 } else { 24 result += fmt.Sprintf("%d", b) 25 } 26 } 27 result += "}" 28 return result 29 } 30 31 func main() { 32 println("generating assets:") 33 filesDir := path.Join("assets", "files") 34 dir := http.Dir(filesDir) 35 36 root, err := dir.Open("/") 37 must(err) 38 39 info, err := root.Stat() 40 must(err) 41 42 if !info.IsDir() { 43 must(errors.New("given path is not a directory")) 44 } 45 46 assets, err := root.Readdir(-1) 47 must(err) 48 49 generated, err := os.Create(path.Join("assets", "generated.go")) 50 must(err) 51 52 var sortedAssets []string 53 for _, asset := range assets { 54 sortedAssets = append(sortedAssets, asset.Name()) 55 } 56 sort.Strings(sortedAssets) 57 58 io.WriteString(generated, `// Code generated by go generate; DO NOT EDIT. 59 60 package assets 61 62 func init() { 63 Assets = New() 64 `) 65 66 for _, asset := range sortedAssets { 67 raw, err := os.ReadFile(path.Join(filesDir, asset)) 68 must(err) 69 70 println("\t" + asset) 71 72 io.WriteString(generated, fmt.Sprintf(` Assets.files["%s"] = &AssetFile{bytes: %v, size: "%d"} 73 `, asset, &StringBuffer{bytes.NewBuffer(raw)}, len(raw))) 74 } 75 76 io.WriteString(generated, "}\n") 77 } 78 79 func must(err error) { 80 if err != nil { 81 println(err.Error()) 82 os.Exit(1) 83 } 84 }