| // This work is subject to the CC0 1.0 Universal (CC0 1.0) Public Domain Dedication |
| // license. Its contents can be found at: |
| // http://creativecommons.org/publicdomain/zero/1.0/ |
| |
| package bindata |
| |
| import ( |
| "fmt" |
| "io" |
| ) |
| |
| // writeDebug writes the debug code file. |
| func writeDebug(w io.Writer, c *Config, toc []Asset) error { |
| err := writeDebugHeader(w) |
| if err != nil { |
| return err |
| } |
| |
| for i := range toc { |
| err = writeDebugAsset(w, c, &toc[i]) |
| if err != nil { |
| return err |
| } |
| } |
| |
| return nil |
| } |
| |
| // writeDebugHeader writes output file headers. |
| // This targets debug builds. |
| func writeDebugHeader(w io.Writer) error { |
| _, err := fmt.Fprintf(w, `import ( |
| "fmt" |
| "io/ioutil" |
| "os" |
| "path/filepath" |
| "strings" |
| ) |
| |
| // bindataRead reads the given file from disk. It returns an error on failure. |
| func bindataRead(path, name string) ([]byte, error) { |
| buf, err := ioutil.ReadFile(path) |
| if err != nil { |
| err = fmt.Errorf("Error reading asset %%s at %%s: %%v", name, path, err) |
| } |
| return buf, err |
| } |
| |
| type asset struct { |
| bytes []byte |
| info os.FileInfo |
| } |
| |
| `) |
| return err |
| } |
| |
| // writeDebugAsset write a debug entry for the given asset. |
| // A debug entry is simply a function which reads the asset from |
| // the original file (e.g.: from disk). |
| func writeDebugAsset(w io.Writer, c *Config, asset *Asset) error { |
| pathExpr := fmt.Sprintf("%q", asset.Path) |
| if c.Dev { |
| pathExpr = fmt.Sprintf("filepath.Join(rootDir, %q)", asset.Name) |
| } |
| |
| _, err := fmt.Fprintf(w, `// %s reads file data from disk. It returns an error on failure. |
| func %s() (*asset, error) { |
| path := %s |
| name := %q |
| bytes, err := bindataRead(path, name) |
| if err != nil { |
| return nil, err |
| } |
| |
| fi, err := os.Stat(path) |
| if err != nil { |
| err = fmt.Errorf("Error reading asset info %%s at %%s: %%v", name, path, err) |
| } |
| |
| a := &asset{bytes: bytes, info: fi} |
| return a, err |
| } |
| |
| `, asset.Func, asset.Func, pathExpr, asset.Name) |
| return err |
| } |