192 lines
5.5 KiB
Go
192 lines
5.5 KiB
Go
// Package wisski provides WissKI
|
|
package wisski
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/barrel"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/barrel/composer"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/barrel/drush"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/barrel/manager"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/barrel/ssh"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/barrel/system"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/bookkeeping"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/info"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/locker"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/mstore"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/php"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/php/extras"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/php/users"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/reserve"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/trb"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/wisski/liquid"
|
|
"github.com/tkw1536/pkglib/lifetime"
|
|
)
|
|
|
|
// WissKI represents a single WissKI Instance.
|
|
// A WissKI may not be copied
|
|
type WissKI struct {
|
|
liquid.Liquid
|
|
|
|
lifetimeInit sync.Once
|
|
lifetime lifetime.Lifetime[ingredient.Ingredient, *liquid.Liquid]
|
|
}
|
|
|
|
//
|
|
// INIT & EXPORT
|
|
//
|
|
|
|
func (wisski *WissKI) init() {
|
|
wisski.lifetimeInit.Do(func() {
|
|
wisski.lifetime.Init = ingredient.Init
|
|
wisski.lifetime.Register = wisski.allIngredients
|
|
})
|
|
}
|
|
|
|
func export[I ingredient.Ingredient](wisski *WissKI) I {
|
|
wisski.init()
|
|
return lifetime.Export[I](&wisski.lifetime, &wisski.Liquid)
|
|
}
|
|
|
|
//lint:ignore U1000 for future use
|
|
func exportAll[I ingredient.Ingredient](wisski *WissKI) []I {
|
|
wisski.init()
|
|
return lifetime.ExportSlice[I](&wisski.lifetime, &wisski.Liquid)
|
|
}
|
|
|
|
//
|
|
// PUBLIC INGREDIENT GETTERS
|
|
//
|
|
|
|
func (wisski *WissKI) Locker() *locker.Locker {
|
|
return export[*locker.Locker](wisski)
|
|
}
|
|
|
|
func (wisski *WissKI) Reserve() *reserve.Reserve {
|
|
return export[*reserve.Reserve](wisski)
|
|
}
|
|
|
|
func (wisski *WissKI) Barrel() *barrel.Barrel {
|
|
return export[*barrel.Barrel](wisski)
|
|
}
|
|
|
|
func (wisski *WissKI) TRB() *trb.TRB {
|
|
return export[*trb.TRB](wisski)
|
|
}
|
|
|
|
func (wisski *WissKI) Manager() *manager.Manager {
|
|
return export[*manager.Manager](wisski)
|
|
}
|
|
|
|
func (wisski *WissKI) SystemManager() *system.SystemManager {
|
|
return export[*system.SystemManager](wisski)
|
|
}
|
|
|
|
func (wisski *WissKI) PHP() *php.PHP {
|
|
return export[*php.PHP](wisski)
|
|
}
|
|
|
|
func (wisski *WissKI) Bookkeeping() *bookkeeping.Bookkeeping {
|
|
return export[*bookkeeping.Bookkeeping](wisski)
|
|
}
|
|
|
|
func (wisski *WissKI) Drush() *drush.Drush {
|
|
return export[*drush.Drush](wisski)
|
|
}
|
|
|
|
func (wisski *WissKI) Composer() *composer.Composer {
|
|
return export[*composer.Composer](wisski)
|
|
}
|
|
|
|
func (wisski *WissKI) Users() *users.Users {
|
|
return export[*users.Users](wisski)
|
|
}
|
|
|
|
func (wisski *WissKI) Prefixes() *extras.Prefixes {
|
|
return export[*extras.Prefixes](wisski)
|
|
}
|
|
|
|
func (wisski *WissKI) Settings() *extras.Settings {
|
|
return export[*extras.Settings](wisski)
|
|
}
|
|
|
|
func (wisski *WissKI) Pathbuilder() *extras.Pathbuilder {
|
|
return export[*extras.Pathbuilder](wisski)
|
|
}
|
|
|
|
func (wisski *WissKI) Info() *info.Info {
|
|
return export[*info.Info](wisski)
|
|
}
|
|
|
|
func (wisski *WissKI) SSH() *ssh.SSH {
|
|
return export[*ssh.SSH](wisski)
|
|
}
|
|
|
|
func (wisski *WissKI) Blocks() *extras.Blocks {
|
|
return export[*extras.Blocks](wisski)
|
|
}
|
|
|
|
func (wisski *WissKI) Stats() *extras.Stats {
|
|
return export[*extras.Stats](wisski)
|
|
}
|
|
|
|
func (wisski *WissKI) Requirements() *extras.Requirements {
|
|
return export[*extras.Requirements](wisski)
|
|
}
|
|
|
|
func (wisski *WissKI) Version() *extras.Version {
|
|
return export[*extras.Version](wisski)
|
|
}
|
|
|
|
func (wisski *WissKI) Theme() *extras.Theme {
|
|
return export[*extras.Theme](wisski)
|
|
}
|
|
|
|
//
|
|
// All components
|
|
// THESE SHOULD NEVER BE CALLED DIRECTLY
|
|
//
|
|
|
|
func (wisski *WissKI) allIngredients(context *lifetime.Registry[ingredient.Ingredient, *liquid.Liquid]) {
|
|
// core bits
|
|
lifetime.Place[*locker.Locker](context)
|
|
lifetime.Register(context, func(m *mstore.MStore, _ *liquid.Liquid) {
|
|
m.Storage = wisski.Malt.Meta.Storage(wisski.Slug)
|
|
})
|
|
|
|
// php
|
|
lifetime.Place[*php.PHP](context)
|
|
lifetime.Place[*extras.Prefixes](context)
|
|
lifetime.Place[*extras.Settings](context)
|
|
lifetime.Place[*extras.Pathbuilder](context)
|
|
lifetime.Place[*extras.Stats](context)
|
|
lifetime.Place[*extras.Blocks](context)
|
|
lifetime.Place[*extras.Requirements](context)
|
|
lifetime.Place[*extras.Adapters](context)
|
|
lifetime.Place[*extras.Theme](context)
|
|
lifetime.Place[*extras.Version](context)
|
|
lifetime.Place[*users.Users](context)
|
|
lifetime.Place[*users.UserPolicy](context)
|
|
|
|
// info
|
|
lifetime.Place[*info.Info](context)
|
|
lifetime.Place[*barrel.LastRebuildFetcher](context)
|
|
lifetime.Place[*barrel.RunningFetcher](context)
|
|
lifetime.Place[*composer.LastUpdateFetcher](context)
|
|
lifetime.Place[*drush.LastCronFetcher](context)
|
|
lifetime.Place[*info.SnapshotsFetcher](context)
|
|
|
|
// stacks
|
|
lifetime.Place[*barrel.Barrel](context)
|
|
lifetime.Place[*bookkeeping.Bookkeeping](context)
|
|
lifetime.Place[*manager.Manager](context)
|
|
lifetime.Place[*system.SystemManager](context)
|
|
lifetime.Place[*composer.Composer](context)
|
|
lifetime.Place[*drush.Drush](context)
|
|
|
|
lifetime.Place[*reserve.Reserve](context)
|
|
|
|
lifetime.Place[*ssh.SSH](context)
|
|
lifetime.Place[*trb.TRB](context)
|
|
}
|