77 lines
1.4 KiB
Go
77 lines
1.4 KiB
Go
package ctx
|
|
|
|
import "context"
|
|
|
|
// clientAddrKey saves the client address.
|
|
type clientAddrKey struct{}
|
|
|
|
type ClientAddr string
|
|
|
|
var (
|
|
keyClientAddr clientAddrKey
|
|
)
|
|
|
|
func ContextWithClientAddr(ctx context.Context, addr ClientAddr) context.Context {
|
|
return context.WithValue(ctx, keyClientAddr, addr)
|
|
}
|
|
|
|
func ClientAddrFromContext(ctx context.Context) ClientAddr {
|
|
v, _ := ctx.Value(keyClientAddr).(ClientAddr)
|
|
return v
|
|
}
|
|
|
|
// sidKey saves the session ID.
|
|
type sidKey struct{}
|
|
type Sid string
|
|
|
|
var (
|
|
keySid sidKey
|
|
)
|
|
|
|
func ContextWithSid(ctx context.Context, sid Sid) context.Context {
|
|
return context.WithValue(ctx, keySid, sid)
|
|
}
|
|
|
|
func SidFromContext(ctx context.Context) Sid {
|
|
v, _ := ctx.Value(keySid).(Sid)
|
|
return v
|
|
}
|
|
|
|
// hashKey saves the hash source for Selector.
|
|
type hashKey struct{}
|
|
|
|
type Hash struct {
|
|
Source string
|
|
}
|
|
|
|
var (
|
|
clientHashKey = &hashKey{}
|
|
)
|
|
|
|
func ContextWithHash(ctx context.Context, hash *Hash) context.Context {
|
|
return context.WithValue(ctx, clientHashKey, hash)
|
|
}
|
|
|
|
func HashFromContext(ctx context.Context) *Hash {
|
|
if v, _ := ctx.Value(clientHashKey).(*Hash); v != nil {
|
|
return v
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type clientIDKey struct{}
|
|
type ClientID string
|
|
|
|
var (
|
|
keyClientID = &clientIDKey{}
|
|
)
|
|
|
|
func ContextWithClientID(ctx context.Context, clientID ClientID) context.Context {
|
|
return context.WithValue(ctx, keyClientID, clientID)
|
|
}
|
|
|
|
func ClientIDFromContext(ctx context.Context) ClientID {
|
|
v, _ := ctx.Value(keyClientID).(ClientID)
|
|
return v
|
|
}
|