99 lines
2.0 KiB
Go
99 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"text/template"
|
|
)
|
|
|
|
var tmplEmbeddedBox *template.Template
|
|
|
|
func init() {
|
|
var err error
|
|
|
|
// parse embedded box template
|
|
tmplEmbeddedBox, err = template.New("embeddedBox").Parse(`package {{.Package}}
|
|
|
|
import (
|
|
"github.com/GeertJohan/go.rice/embedded"
|
|
"time"
|
|
)
|
|
|
|
{{range .Boxes}}
|
|
func init() {
|
|
|
|
// define files
|
|
{{range .Files}}{{.Identifier}} := &embedded.EmbeddedFile{
|
|
Filename: {{.FileName | printf "%q"}},
|
|
FileModTime: time.Unix({{.ModTime}}, 0),
|
|
Content: string({{.Content | printf "%q"}}),
|
|
}
|
|
{{end}}
|
|
|
|
// define dirs
|
|
{{range .Dirs}}{{.Identifier}} := &embedded.EmbeddedDir{
|
|
Filename: {{.FileName | printf "%q"}},
|
|
DirModTime: time.Unix({{.ModTime}}, 0),
|
|
ChildFiles: []*embedded.EmbeddedFile{
|
|
{{range .ChildFiles}}{{.Identifier}}, // {{.FileName | printf "%q"}}
|
|
{{end}}
|
|
},
|
|
}
|
|
{{end}}
|
|
|
|
// link ChildDirs
|
|
{{range .Dirs}}{{.Identifier}}.ChildDirs = []*embedded.EmbeddedDir{
|
|
{{range .ChildDirs}}{{.Identifier}}, // {{.FileName | printf "%q"}}
|
|
{{end}}
|
|
}
|
|
{{end}}
|
|
|
|
// register embeddedBox
|
|
embedded.RegisterEmbeddedBox(` + "`" + `{{.BoxName}}` + "`" + `, &embedded.EmbeddedBox{
|
|
Name: ` + "`" + `{{.BoxName}}` + "`" + `,
|
|
Time: time.Unix({{.UnixNow}}, 0),
|
|
Dirs: map[string]*embedded.EmbeddedDir{
|
|
{{range .Dirs}}{{.FileName | printf "%q"}}: {{.Identifier}},
|
|
{{end}}
|
|
},
|
|
Files: map[string]*embedded.EmbeddedFile{
|
|
{{range .Files}}{{.FileName | printf "%q"}}: {{.Identifier}},
|
|
{{end}}
|
|
},
|
|
})
|
|
}
|
|
{{end}}`)
|
|
if err != nil {
|
|
fmt.Printf("error parsing embedded box template: %s\n", err)
|
|
os.Exit(-1)
|
|
}
|
|
}
|
|
|
|
type embedFileDataType struct {
|
|
Package string
|
|
Boxes []*boxDataType
|
|
}
|
|
|
|
type boxDataType struct {
|
|
BoxName string
|
|
UnixNow int64
|
|
Files []*fileDataType
|
|
Dirs map[string]*dirDataType
|
|
}
|
|
|
|
type fileDataType struct {
|
|
Identifier string
|
|
FileName string
|
|
Content []byte
|
|
ModTime int64
|
|
}
|
|
|
|
type dirDataType struct {
|
|
Identifier string
|
|
FileName string
|
|
Content []byte
|
|
ModTime int64
|
|
ChildDirs []*dirDataType
|
|
ChildFiles []*fileDataType
|
|
}
|