70 lines
1.3 KiB
Go
70 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
_ "embed"
|
|
"fmt"
|
|
"io"
|
|
"io/ioutil"
|
|
"local/args"
|
|
"log"
|
|
"net/http"
|
|
"text/template"
|
|
)
|
|
|
|
//go:embed words.json
|
|
var words string
|
|
|
|
//go:embed index.html
|
|
var index string
|
|
|
|
func main() {
|
|
as := args.NewArgSet()
|
|
as.Append(args.INT, "p", "port to listen on", 8091)
|
|
as.Append(args.BOOL, "debug", "debug mode", false)
|
|
if err := as.Parse(); err != nil {
|
|
panic(err)
|
|
}
|
|
log.Printf("args: %+v", as)
|
|
if err := http.ListenAndServe(fmt.Sprintf(":%d", as.GetInt("p")), server{args: as}); err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
type server struct {
|
|
args *args.ArgSet
|
|
}
|
|
|
|
func (server server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|
if err := server.writeIndex(w); err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func (server server) writeIndex(w io.Writer) error {
|
|
if server.args.GetBool("debug") {
|
|
return server.writeIndexFile(w)
|
|
}
|
|
return server.writeIndexEmbed(w)
|
|
}
|
|
|
|
func (server server) writeIndexEmbed(w io.Writer) error {
|
|
t := template.New("index")
|
|
t, err := t.Parse(index)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return t.Execute(w, struct{ Words string }{Words: words})
|
|
}
|
|
|
|
func (server server) writeIndexFile(w io.Writer) error {
|
|
b, err := ioutil.ReadFile("words.json")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
t, err := template.ParseFiles("index.html")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return t.Execute(w, struct{ Words string }{Words: string(b)})
|
|
}
|