53 lines
1.0 KiB
Go
53 lines
1.0 KiB
Go
package main
|
|
|
|
import (
|
|
"embed"
|
|
_ "embed"
|
|
"github.com/pkg/browser"
|
|
"io/fs"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
"os/signal"
|
|
"path"
|
|
)
|
|
|
|
//go:generate go run ./builder
|
|
//go:embed build/for-build
|
|
var asset embed.FS
|
|
|
|
func main() {
|
|
pfxFs := WithPrefix(asset, "build/for-build")
|
|
go func() {
|
|
err := http.ListenAndServe("localhost:6280", http.FileServer(http.FS(pfxFs)))
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}()
|
|
log.Println("you can now open browser with: http://localhost:6280 to access this tool.")
|
|
err := browser.OpenURL("http://localhost:6280")
|
|
if err != nil {
|
|
log.Println("error while opening browser:", err)
|
|
}
|
|
sign := make(chan os.Signal, 1)
|
|
signal.Notify(sign, os.Interrupt, os.Kill)
|
|
<-sign
|
|
}
|
|
|
|
type WrappedFS struct {
|
|
inner fs.FS
|
|
prefix string
|
|
}
|
|
|
|
func (f WrappedFS) Open(p string) (fs.File, error) {
|
|
p = path.Join(f.prefix, p)
|
|
log.Printf("serving: %s\n", p)
|
|
return f.inner.Open(p)
|
|
}
|
|
|
|
// same thing but for ReadFile, Stat, ReadDir, Glob, and maybe Rename, OpenFile?
|
|
|
|
func WithPrefix(f fs.FS, p string) WrappedFS {
|
|
return WrappedFS{f, p}
|
|
}
|