From 69a291d19e8d58614aa3480725b70a5674e21072 Mon Sep 17 00:00:00 2001 From: "Gustavo \"Guz\" L de Mello" Date: Mon, 17 Mar 2025 11:20:00 -0300 Subject: [PATCH] feat(comicverse): support for local assets files --- cmd/cmd.go | 4 ++-- comicverse.go | 5 +++-- internals/joinedfs/joinedfs.go | 25 +++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 internals/joinedfs/joinedfs.go diff --git a/cmd/cmd.go b/cmd/cmd.go index 2b21a5b..4b221e5 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -109,8 +109,8 @@ func main() { } if *dev { - d := os.DirFS("./static") - opts = append(opts, comicverse.WithStaticFiles(d)) + d := os.DirFS("./assets") + opts = append(opts, comicverse.WithAssets(d)) opts = append(opts, comicverse.WithDevelopmentMode()) } diff --git a/comicverse.go b/comicverse.go index 5cd8082..019fd59 100644 --- a/comicverse.go +++ b/comicverse.go @@ -11,6 +11,7 @@ import ( "forge.capytal.company/capytalcode/project-comicverse/assets" "forge.capytal.company/capytalcode/project-comicverse/database" + "forge.capytal.company/capytalcode/project-comicverse/internals/joinedfs" "forge.capytal.company/capytalcode/project-comicverse/router" "forge.capytal.company/capytalcode/project-comicverse/service" "forge.capytal.company/capytalcode/project-comicverse/templates" @@ -77,8 +78,8 @@ func WithContext(ctx context.Context) Option { return func(app *app) { app.ctx = ctx } } -func WithStaticFiles(f fs.FS) Option { - return func(app *app) { app.staticFiles = f } +func WithAssets(f fs.FS) Option { + return func(app *app) { app.assets = joinedfs.Join(f, app.assets) } } func WithAssertions(a tinyssert.Assertions) Option { diff --git a/internals/joinedfs/joinedfs.go b/internals/joinedfs/joinedfs.go new file mode 100644 index 0000000..5635d19 --- /dev/null +++ b/internals/joinedfs/joinedfs.go @@ -0,0 +1,25 @@ +package joinedfs + +import "io/fs" + +func Join(fsys ...fs.FS) fs.FS { + return &joinedFS{fsys} +} + +type joinedFS struct { + fsys []fs.FS +} + +var _ fs.FS = (*joinedFS)(nil) + +func (j *joinedFS) Open(name string) (fs.File, error) { + var err error + var f fs.File + for _, fsys := range j.fsys { + f, err = fsys.Open(name) + if err == nil { + return f, nil + } + } + return f, err +}