Massive cleanups on http frontend aspects

This commit is contained in:
2023-10-25 23:49:47 +02:00
parent b934270d14
commit 3d5fa80fc9
11 changed files with 412 additions and 114 deletions

View File

@@ -1,17 +1,22 @@
package startup
import "github.com/julienschmidt/httprouter"
// Pre-defined queues...
var (
Logger StartupQueue
PostFlags StartupQueue
Logger Phase
// Phase
PostFlags Phase
Startup Phase
Routes ParameterizedPhase[*httprouter.Router]
)
type StartupQueue struct {
type Phase struct {
items []func()
hasRun bool
}
func (q *StartupQueue) Add(initFn ...func()) {
func (q *Phase) Add(initFn ...func()) {
if q.hasRun {
panic("Added init function after startup")
}
@@ -20,7 +25,7 @@ func (q *StartupQueue) Add(initFn ...func()) {
}
}
func (q *StartupQueue) Run() {
func (q *Phase) Run() {
if q.hasRun {
panic("Attempted to run init function twice")
}
@@ -29,3 +34,27 @@ func (q *StartupQueue) Run() {
fn()
}
}
type ParameterizedPhase[Param interface{}] struct {
items []func(Param)
hasRun bool
}
func (q *ParameterizedPhase[Param]) Add(initFn ...func(Param)) {
if q.hasRun {
panic("Added init function after startup")
}
for _, fn := range initFn {
q.items = append(q.items, fn)
}
}
func (q *ParameterizedPhase[Param]) Run(param Param) {
if q.hasRun {
panic("Attempted to run init function twice")
}
q.hasRun = true
for _, fn := range q.items {
fn(param)
}
}