mirror of
https://github.com/Theodor-Springmann-Stiftung/lenz-web.git
synced 2026-03-21 05:45:32 +00:00
41 lines
634 B
Go
41 lines
634 B
Go
package app
|
|
|
|
import "sync"
|
|
|
|
type Route struct {
|
|
Path string
|
|
Kind string
|
|
ID string
|
|
page Page
|
|
}
|
|
|
|
type Page interface {
|
|
Discover(app *App) ([]Route, error)
|
|
Model(app *App, route Route) (map[string]any, error)
|
|
Render(app *App, route Route, model map[string]any) ([]byte, error)
|
|
}
|
|
|
|
var (
|
|
pagesMu sync.RWMutex
|
|
pages []Page
|
|
)
|
|
|
|
func RegisterPage(page Page) {
|
|
if page == nil {
|
|
panic("cannot register nil page")
|
|
}
|
|
|
|
pagesMu.Lock()
|
|
defer pagesMu.Unlock()
|
|
pages = append(pages, page)
|
|
}
|
|
|
|
func RegisteredPages() []Page {
|
|
pagesMu.RLock()
|
|
defer pagesMu.RUnlock()
|
|
|
|
ret := make([]Page, len(pages))
|
|
copy(ret, pages)
|
|
return ret
|
|
}
|