// FileRead2RenderFile turns a fs.FileRead into a RenderFile object func FileRead2RenderFile() flux.Reactor { return flux.FlatSimple(func(root flux.Reactor, data interface{}) { if fr, ok := data.(*fs.FileRead); ok { root.Reply(&RenderFile{Path: fr.Path, Data: fr.Data}) } }) }
// RenderFile2FileWrite turns a RenderFile into a fs.FileWrite object func RenderFile2FileWrite() flux.Reactor { return flux.FlatSimple(func(root flux.Reactor, data interface{}) { if fr, ok := data.(*RenderFile); ok { root.Reply(&fs.FileWrite{Path: fr.Path, Data: fr.Data}) } }) }
// MutateFileWrite turns a fs.FileWrite into a RenderFile object func MutateFileWrite(fx FileWriteMutator) flux.Reactor { if fx == nil { fx = defaultMutateFileWrite } return flux.FlatSimple(func(root flux.Reactor, data interface{}) { if fr, ok := data.(*fs.FileWrite); ok { root.Reply(fx(fr)) } }) }
// StreamListings takes a path and generates a assets.DirListing struct when it receives any signal, it will go through all the files within each listings. func StreamListings(config ListingConfig) (flux.Reactor, error) { dir, err := assets.DirListings(config.Path, config.Validator, config.Mux) if err != nil { return nil, err } return flux.FlatSimple(func(root flux.Reactor, data interface{}) { if err := dir.Reload(); err != nil { root.ReplyError(err) return } // no error occured reloading, so we stream out the directory, list dir.Listings.Wo.RLock() for _, files := range dir.Listings.Tree { if config.DirAlso { if !config.UseRelative { root.Reply(files.AbsDir) } else { root.Reply(filepath.ToSlash(files.Dir)) } } files.Tree.Each(func(mod, real string) { if !config.UseRelative { rel, err := filepath.Abs(real) if err != nil { rel = real } // log.Printf("Sending %s -> %s -> %s", files.AbsDir, real, rel) root.Reply(rel) } else { root.Reply(filepath.Join(files.Dir, real)) } }) } dir.Listings.Wo.RUnlock() }), nil }