alchemyst/util/appctx/context.go
2020-09-25 00:45:45 +03:00

52 lines
1.0 KiB
Go

package appctx
import (
"context"
"fmt"
"github.com/rs/zerolog"
"lab.zaar.be/thefish/alchemyst-go/util"
)
const (
configKey = "config"
loggerKey = "logger"
)
type clientCtx struct {
context.Context
}
var ClientState clientCtx
func NewClientContext(config *util.Config, logger *zerolog.Logger) {
ctx := context.Context(context.TODO())
ctx = context.WithValue(ctx, configKey, config)
ctx = context.WithValue(ctx, loggerKey, logger)
ClientState = clientCtx{ctx}
}
func Config(c context.Context) *util.Config {
cfg, ok := c.Value(configKey).(*util.Config)
if !ok {
panic(fmt.Errorf("no access to config from context"))
}
return cfg
}
func Logger() *zerolog.Logger {
return getLogger(ClientState.Context)
}
func getLogger(c context.Context) *zerolog.Logger {
logger, ok := c.Value(loggerKey).(*zerolog.Logger)
if !ok {
panic(fmt.Errorf("no access to logger from context"))
}
return logger
}
//func FromContext(appctx context.Context) (*User, bool) {
// u, ok := appctx.Value(userKey).(*User)
// return u, ok
//}