charades/main.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)})
}