diff --git a/staticserve/muxservefs.go b/staticserve/muxservefs.go deleted file mode 100644 index 41e1e11..0000000 --- a/staticserve/muxservefs.go +++ /dev/null @@ -1,33 +0,0 @@ -package staticserve - -import ( - "io" - "io/fs" - "net/http" - "path" -) - -func MuxServeFS(mux *http.ServeMux, prefix string, fsys fs.FS) (uris map[string]string, err error) { - err = fs.WalkDir(fsys, ".", func(fn string, d fs.DirEntry, err error) error { - if err == nil && !d.IsDir() { - var f fs.File - if f, err = fsys.Open(fn); err == nil { - defer f.Close() - var b []byte - if b, err = io.ReadAll(f); err == nil { - var ss *StaticServe - if ss, err = New(fn, b); err == nil { - uri := path.Join(prefix, ss.Name) - if uris == nil { - uris = make(map[string]string) - } - uris[fn] = uri - mux.Handle(uri, ss) - } - } - } - } - return err - }) - return -} diff --git a/staticserve/walkdir.go b/staticserve/walkdir.go new file mode 100644 index 0000000..4c4ec05 --- /dev/null +++ b/staticserve/walkdir.go @@ -0,0 +1,30 @@ +package staticserve + +import ( + "io" + "io/fs" + "strings" +) + +// WalkDir walks the file tree rooted at root, calling fn for each file in the tree with +// the filename having root trimmed (e.g. "root/dir/file.ext" becomes "dir/file.ext"). +func WalkDir(fsys fs.FS, root string, fn func(filename string, ss *StaticServe) (err error)) (err error) { + err = fs.WalkDir(fsys, root, func(filename string, d fs.DirEntry, err error) error { + if err == nil && !d.IsDir() { + var f fs.File + if f, err = fsys.Open(filename); err == nil { + defer f.Close() + var b []byte + if b, err = io.ReadAll(f); err == nil { + var ss *StaticServe + filename = strings.TrimPrefix(strings.TrimPrefix(filename, root), "/") + if ss, err = New(filename, b); err == nil { + err = fn(filename, ss) + } + } + } + } + return err + }) + return +} diff --git a/staticserve/muxservefs_test.go b/staticserve/walkdir_test.go similarity index 59% rename from staticserve/muxservefs_test.go rename to staticserve/walkdir_test.go index 4c97366..c7f2f6f 100644 --- a/staticserve/muxservefs_test.go +++ b/staticserve/walkdir_test.go @@ -4,6 +4,7 @@ import ( "embed" "net/http" "net/http/httptest" + "path" "testing" "github.com/linkdata/jaws/staticserve" @@ -12,17 +13,23 @@ import ( //go:embed assets var assetsFS embed.FS -func Test_MuxServeFS(t *testing.T) { +func Test_WalkDir(t *testing.T) { + var uris []string mux := http.NewServeMux() - uris, err := staticserve.MuxServeFS(mux, "/", assetsFS) + err := staticserve.WalkDir(assetsFS, "assets", func(filepath string, ss *staticserve.StaticServe) (err error) { + uri := path.Join("/static", ss.Name) + t.Log(filepath, uri) + uris = append(uris, uri) + mux.Handle(uri, ss) + return + }) if err != nil { t.Error(err) } if len(uris) != 2 { t.Error("expected two uris") } - for fn, uri := range uris { - t.Log(fn, uri) + for _, uri := range uris { rq := httptest.NewRequest(http.MethodGet, uri, nil) rr := httptest.NewRecorder() mux.ServeHTTP(rr, rq)