56 lines
1011 B
Go
56 lines
1011 B
Go
|
package context
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
)
|
||
|
|
||
|
type keyType int
|
||
|
|
||
|
const (
|
||
|
contextKey keyType = iota
|
||
|
deviceKey
|
||
|
actionKey
|
||
|
)
|
||
|
|
||
|
func Context(ctx context.Context) string {
|
||
|
return get(ctx, contextKey)
|
||
|
}
|
||
|
|
||
|
func WithContext(ctx context.Context, streamdeckContext string) context.Context {
|
||
|
return context.WithValue(ctx, contextKey, streamdeckContext)
|
||
|
}
|
||
|
|
||
|
func Device(ctx context.Context) string {
|
||
|
return get(ctx, deviceKey)
|
||
|
}
|
||
|
|
||
|
func WithDevice(ctx context.Context, streamdeckDevice string) context.Context {
|
||
|
return context.WithValue(ctx, deviceKey, streamdeckDevice)
|
||
|
}
|
||
|
|
||
|
func Action(ctx context.Context) string {
|
||
|
return get(ctx, actionKey)
|
||
|
}
|
||
|
|
||
|
func WithAction(ctx context.Context, streamdeckAction string) context.Context {
|
||
|
return context.WithValue(ctx, actionKey, streamdeckAction)
|
||
|
}
|
||
|
|
||
|
func get(ctx context.Context, key keyType) string {
|
||
|
if ctx == nil {
|
||
|
return ""
|
||
|
}
|
||
|
|
||
|
val := ctx.Value(key)
|
||
|
if val == nil {
|
||
|
return ""
|
||
|
}
|
||
|
|
||
|
valStr, ok := val.(string)
|
||
|
if !ok {
|
||
|
panic("found non-string in context")
|
||
|
}
|
||
|
|
||
|
return valStr
|
||
|
}
|