forked from lug/matterbridge
		
	
		
			
				
	
	
		
			81 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Package embedded defines embedded data types that are shared between the go.rice package and generated code.
 | |
| package embedded
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"path/filepath"
 | |
| 	"strings"
 | |
| 	"time"
 | |
| )
 | |
| 
 | |
| const (
 | |
| 	EmbedTypeGo   = 0
 | |
| 	EmbedTypeSyso = 1
 | |
| )
 | |
| 
 | |
| // EmbeddedBox defines an embedded box
 | |
| type EmbeddedBox struct {
 | |
| 	Name      string                   // box name
 | |
| 	Time      time.Time                // embed time
 | |
| 	EmbedType int                      // kind of embedding
 | |
| 	Files     map[string]*EmbeddedFile // ALL embedded files by full path
 | |
| 	Dirs      map[string]*EmbeddedDir  // ALL embedded dirs by full path
 | |
| }
 | |
| 
 | |
| // Link creates the ChildDirs and ChildFiles links in all EmbeddedDir's
 | |
| func (e *EmbeddedBox) Link() {
 | |
| 	for path, ed := range e.Dirs {
 | |
| 		fmt.Println(path)
 | |
| 		ed.ChildDirs = make([]*EmbeddedDir, 0)
 | |
| 		ed.ChildFiles = make([]*EmbeddedFile, 0)
 | |
| 	}
 | |
| 	for path, ed := range e.Dirs {
 | |
| 		parentDirpath, _ := filepath.Split(path)
 | |
| 		if strings.HasSuffix(parentDirpath, "/") {
 | |
| 			parentDirpath = parentDirpath[:len(parentDirpath)-1]
 | |
| 		}
 | |
| 		parentDir := e.Dirs[parentDirpath]
 | |
| 		if parentDir == nil {
 | |
| 			panic("parentDir `" + parentDirpath + "` is missing in embedded box")
 | |
| 		}
 | |
| 		parentDir.ChildDirs = append(parentDir.ChildDirs, ed)
 | |
| 	}
 | |
| 	for path, ef := range e.Files {
 | |
| 		dirpath, _ := filepath.Split(path)
 | |
| 		if strings.HasSuffix(dirpath, "/") {
 | |
| 			dirpath = dirpath[:len(dirpath)-1]
 | |
| 		}
 | |
| 		dir := e.Dirs[dirpath]
 | |
| 		if dir == nil {
 | |
| 			panic("dir `" + dirpath + "` is missing in embedded box")
 | |
| 		}
 | |
| 		dir.ChildFiles = append(dir.ChildFiles, ef)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // EmbeddedDir is instanced in the code generated by the rice tool and contains all necicary information about an embedded file
 | |
| type EmbeddedDir struct {
 | |
| 	Filename   string
 | |
| 	DirModTime time.Time
 | |
| 	ChildDirs  []*EmbeddedDir  // direct childs, as returned by virtualDir.Readdir()
 | |
| 	ChildFiles []*EmbeddedFile // direct childs, as returned by virtualDir.Readdir()
 | |
| }
 | |
| 
 | |
| // EmbeddedFile is instanced in the code generated by the rice tool and contains all necicary information about an embedded file
 | |
| type EmbeddedFile struct {
 | |
| 	Filename    string // filename
 | |
| 	FileModTime time.Time
 | |
| 	Content     string
 | |
| }
 | |
| 
 | |
| // EmbeddedBoxes is a public register of embedded boxes
 | |
| var EmbeddedBoxes = make(map[string]*EmbeddedBox)
 | |
| 
 | |
| // RegisterEmbeddedBox registers an EmbeddedBox
 | |
| func RegisterEmbeddedBox(name string, box *EmbeddedBox) {
 | |
| 	if _, exists := EmbeddedBoxes[name]; exists {
 | |
| 		panic(fmt.Sprintf("EmbeddedBox with name `%s` exists already", name))
 | |
| 	}
 | |
| 	EmbeddedBoxes[name] = box
 | |
| }
 | 
