forked from lug/matterbridge
		
	
		
			
				
	
	
		
			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}}` + "`" + `,
 | |
| 		FileModTime: time.Unix({{.ModTime}}, 0),
 | |
| 		Content:     string({{.Content | printf "%q"}}), 
 | |
| 	}
 | |
| 	{{end}}
 | |
| 
 | |
| 	// define dirs
 | |
| 	{{range .Dirs}}{{.Identifier}} := &embedded.EmbeddedDir{
 | |
| 		Filename:    ` + "`" + `{{.FileName}}` + "`" + `,
 | |
| 		DirModTime: time.Unix({{.ModTime}}, 0),
 | |
| 		ChildFiles:  []*embedded.EmbeddedFile{
 | |
| 			{{range .ChildFiles}}{{.Identifier}}, // {{.FileName}}
 | |
| 			{{end}}
 | |
| 		},
 | |
| 	}
 | |
| 	{{end}}
 | |
| 
 | |
| 	// link ChildDirs
 | |
| 	{{range .Dirs}}{{.Identifier}}.ChildDirs = []*embedded.EmbeddedDir{
 | |
| 		{{range .ChildDirs}}{{.Identifier}}, // {{.FileName}}
 | |
| 		{{end}}
 | |
| 	}
 | |
| 	{{end}}
 | |
| 
 | |
| 	// register embeddedBox
 | |
| 	embedded.RegisterEmbeddedBox(` + "`" + `{{.BoxName}}` + "`" + `, &embedded.EmbeddedBox{
 | |
| 		Name: ` + "`" + `{{.BoxName}}` + "`" + `,
 | |
| 		Time: time.Unix({{.UnixNow}}, 0),
 | |
| 		Dirs: map[string]*embedded.EmbeddedDir{
 | |
| 			{{range .Dirs}}"{{.FileName}}": {{.Identifier}},
 | |
| 			{{end}}
 | |
| 		},
 | |
| 		Files: map[string]*embedded.EmbeddedFile{
 | |
| 			{{range .Files}}"{{.FileName}}": {{.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
 | |
| }
 | 
