| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- // +build !confonly
- package core
- import (
- "context"
- )
- // V2rayKey is the key type of Instance in Context, exported for test.
- type V2rayKey int
- const v2rayKey V2rayKey = 1
- // FromContext returns an Instance from the given context, or nil if the context doesn't contain one.
- func FromContext(ctx context.Context) *Instance {
- if s, ok := ctx.Value(v2rayKey).(*Instance); ok {
- return s
- }
- return nil
- }
- // MustFromContext returns an Instance from the given context, or panics if not present.
- func MustFromContext(ctx context.Context) *Instance {
- v := FromContext(ctx)
- if v == nil {
- panic("V is not in context.")
- }
- return v
- }
- // ToContext returns ctx from the given context, or creates an Instance if the context doesn't find that.
- func ToContext(ctx context.Context, v *Instance) context.Context {
- if FromContext(ctx) != v {
- ctx = context.WithValue(ctx, v2rayKey, v)
- }
- return ctx
- }
- // MustToContext returns ctx from the given context, or panics if not found that.
- func MustToContext(ctx context.Context, v *Instance) context.Context {
- if c := ToContext(ctx, v); c != ctx {
- panic("V is not in context.")
- }
- return ctx
- }
|