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  }