package main import ( "flag" "log" "net/http" "os" "path/filepath" "strings" "git.max-richter.dev/max/marka/server-new/internal/adapters" "git.max-richter.dev/max/marka/server-new/internal/handler" ) type multi []string func (m *multi) String() string { return strings.Join(*m, ",") } func (m *multi) Set(v string) error { *m = append(*m, v) return nil } func main() { var roots multi flag.Var(&roots, "root", "repeatable; specify multiple -root flags") addr := flag.String("addr", ":8080", "listen address") flag.Parse() if len(roots) == 0 { log.Fatal("at least one -root flag must be specified") } absRoots := make([]string, len(roots)) for i, r := range roots { abs, err := filepath.Abs(r) must(err) info, err := os.Stat(abs) must(err) if !info.IsDir() { log.Fatalf("root %s is not a directory", r) } absRoots[i] = abs } fsAdapter, err := adapters.NewLocalFsAdapter(absRoots) must(err) http.Handle("/", handler.NewHandler(fsAdapter)) log.Printf("listening on %s, roots=%s", *addr, strings.Join(absRoots, ", ")) log.Fatal(http.ListenAndServe(*addr, nil)) } func must(err error) { if err != nil { log.Fatal(err) } }