From f09d8e6cc913ad7ef6a418a97ef479f6b8da31d9 Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Tue, 8 Feb 2022 10:17:45 -0700 Subject: [PATCH] moar --- spike/review/reinvent/ezmded/server/main.go | 13 ++++ spike/review/reinvent/ezmded/server/server.go | 77 +++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 spike/review/reinvent/ezmded/server/main.go create mode 100644 spike/review/reinvent/ezmded/server/server.go diff --git a/spike/review/reinvent/ezmded/server/main.go b/spike/review/reinvent/ezmded/server/main.go new file mode 100644 index 0000000..253ab52 --- /dev/null +++ b/spike/review/reinvent/ezmded/server/main.go @@ -0,0 +1,13 @@ +package main + +import "net/http" + +func main() { + s := NewServer() + if err := s.Routes(); err != nil { + panic(err) + } + if err := http.ListenAndServe(":3004", s); err != nil { + panic(err) + } +} diff --git a/spike/review/reinvent/ezmded/server/server.go b/spike/review/reinvent/ezmded/server/server.go new file mode 100644 index 0000000..070b525 --- /dev/null +++ b/spike/review/reinvent/ezmded/server/server.go @@ -0,0 +1,77 @@ +package main + +import ( + "errors" + "local/router" + "net/http" + "strings" +) + +type Server struct { + router *router.Router +} + +func NewServer() *Server { + return &Server{ + router: router.New(), + } +} + +func (server *Server) Routes() error { + wildcard := func(s string) string { + return strings.TrimSuffix(s, "/") + "/" + router.Wildcard + } + wildcards := func(s string) string { + return wildcard(wildcard(s)) + } + _ = wildcards + for path, handler := range map[string]func(http.ResponseWriter, *http.Request) error{ + "/api/v0/tree": server.apiV0TreeHandler, + "/api/v0/media": server.apiV0MediaHandler, + wildcard("/api/v0/media"): server.apiV0MediaIDHandler, + "/api/v0/files": server.apiV0FilesHandler, + wildcard("/api/v0/files/"): server.apiV0FilesIDHandler, + "/api/v0/search": server.apiV0SearchHandler, + } { + if err := server.router.Add(path, server.tryCatchHttpHandler(handler)); err != nil { + return err + } + } + return nil +} + +func (server *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { + server.router.ServeHTTP(w, r) +} + +func (server *Server) tryCatchHttpHandler(handler func(http.ResponseWriter, *http.Request) error) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + if err := handler(w, r); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } + } +} + +func (server *Server) apiV0TreeHandler(w http.ResponseWriter, r *http.Request) error { + return errors.New("not impl" + r.URL.Path) +} + +func (server *Server) apiV0MediaHandler(w http.ResponseWriter, r *http.Request) error { + return errors.New("not impl" + r.URL.Path) +} + +func (server *Server) apiV0MediaIDHandler(w http.ResponseWriter, r *http.Request) error { + return errors.New("not impl" + r.URL.Path) +} + +func (server *Server) apiV0FilesHandler(w http.ResponseWriter, r *http.Request) error { + return errors.New("not impl" + r.URL.Path) +} + +func (server *Server) apiV0FilesIDHandler(w http.ResponseWriter, r *http.Request) error { + return errors.New("not impl" + r.URL.Path) +} + +func (server *Server) apiV0SearchHandler(w http.ResponseWriter, r *http.Request) error { + return errors.New("not impl" + r.URL.Path) +}