package server import ( lib "git.sr.ht/~cco/go-scopes" "git.sr.ht/~cco/go-scopes/config" "git.sr.ht/~cco/go-scopes/core/action" ) type Cfg struct { //*config.BaseCfg Port string Addr string routes []routeCfg } func (c *Cfg) AddRoute(path string, spec routeSpec, methods ...string) *Cfg { rcfg := routeCfg{ methods: methods, path: path, spec: spec, } if methods == nil { rcfg.methods = []string{"GET", "POST"} } c.routes = append(c.routes, rcfg) return c } type routeCfg struct { methods []string path string spec routeSpec } type routeSpec interface{} type fsSpec struct { docRoot string } func FileServer(docRoot string) *fsSpec { return &fsSpec{docRoot} } type mhSpec struct { lib.Config proc msgProc } func MsgHandler(pattern string, proc msgProc, rcvs ...string) *mhSpec { if proc == nil { proc = Async } cfg := mhSpec{config.Base("", nil), proc} cfg.AddAction(pattern, action.Base(action.Forward, rcvs...)) return &cfg } type msgProc func(lib.Context, lib.Message) (int, Data)