// Package contexts provides utilities for loading and extracting structs from contexts package contexts import ( "context" "git.haelnorr.com/h/oslstats/internal/permissions" "git.haelnorr.com/h/oslstats/internal/roles" ) type Key string func (c Key) String() string { return "oslstats context key " + string(c) } var ( DevModeKey Key = Key("devmode") PermissionCacheKey Key = Key("permissions") ) func DevMode(ctx context.Context) DevInfo { devmode, ok := ctx.Value(DevModeKey).(DevInfo) if !ok { return DevInfo{} } return devmode } type DevInfo struct { WebsocketBase string HTMXLog bool } // Permissions retrieves the permission cache from context (type-safe) func Permissions(ctx context.Context) *PermissionCache { cache, ok := ctx.Value(PermissionCacheKey).(*PermissionCache) if !ok { return nil } return cache } type PermissionCache struct { Permissions map[permissions.Permission]bool Roles map[roles.Role]bool HasWildcard bool }