From ccccae9aad0ffbfdc3b90e19f84b286f96ac4280 Mon Sep 17 00:00:00 2001
From: Philipp Heckel <pheckel@datto.com>
Date: Mon, 29 Nov 2021 11:10:12 -0500
Subject: [PATCH] Refine embedfs

---
 util/embedfs.go | 50 +++++++++++++------------------------------------
 1 file changed, 13 insertions(+), 37 deletions(-)

diff --git a/util/embedfs.go b/util/embedfs.go
index f06e3b1..07cec1b 100644
--- a/util/embedfs.go
+++ b/util/embedfs.go
@@ -13,25 +13,26 @@ type CachingEmbedFS struct {
 	FS      embed.FS
 }
 
-func (e CachingEmbedFS) Open(name string) (fs.File, error) {
-	f, err := e.FS.Open(name)
+func (f CachingEmbedFS) Open(name string) (fs.File, error) {
+	file, err := f.FS.Open(name)
 	if err != nil {
 		return nil, err
 	}
-	return &cachingEmbedFile{f, e.ModTime}, nil
+	stat, err := file.Stat()
+	if err != nil {
+		return nil, err
+	}
+	return &cachingEmbedFile{file, f.ModTime, stat}, nil
 }
 
 type cachingEmbedFile struct {
 	file    fs.File
 	modTime time.Time
+	fs.FileInfo
 }
 
 func (f cachingEmbedFile) Stat() (fs.FileInfo, error) {
-	s, err := f.file.Stat()
-	if err != nil {
-		return nil, err
-	}
-	return &etagEmbedFileInfo{s, f.modTime}, nil
+	return f, nil
 }
 
 func (f cachingEmbedFile) Read(bytes []byte) (int, error) {
@@ -45,35 +46,10 @@ func (f *cachingEmbedFile) Seek(offset int64, whence int) (int64, error) {
 	return 0, errors.New("io.Seeker not implemented")
 }
 
-func (f cachingEmbedFile) Close() error {
-	return f.file.Close()
-}
-
-type etagEmbedFileInfo struct {
-	file    fs.FileInfo
-	modTime time.Time
+func (f cachingEmbedFile) ModTime() time.Time {
+	return f.modTime // We override this!
 }
 
-func (e etagEmbedFileInfo) Name() string {
-	return e.file.Name()
-}
-
-func (e etagEmbedFileInfo) Size() int64 {
-	return e.file.Size()
-}
-
-func (e etagEmbedFileInfo) Mode() fs.FileMode {
-	return e.file.Mode()
-}
-
-func (e etagEmbedFileInfo) ModTime() time.Time {
-	return e.modTime // We override this!
-}
-
-func (e etagEmbedFileInfo) IsDir() bool {
-	return e.file.IsDir()
-}
-
-func (e etagEmbedFileInfo) Sys() interface{} {
-	return e.file.Sys()
+func (f cachingEmbedFile) Close() error {
+	return f.file.Close()
 }
-- 
GitLab