59 lines
1 KiB
Go
59 lines
1 KiB
Go
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, lib.Data)
|