Documentation
¶
Index ¶
- Constants
- func AddToLogFields(ctx context.Context, key string, value any) context.Context
- func AddToOptions(ctx context.Context, key string, value any) context.Context
- type Options
- func (o *Options) Add(key string, value any)
- func (o *Options) Del(key string)
- func (o *Options) Delete(key any)
- func (o *Options) Get(key string) (any, bool)
- func (o *Options) Load(key any) (any, bool)
- func (o *Options) Range(f func(key, value any) bool)
- func (o *Options) RangeSlice(f func(key, value any) bool)
- func (o *Options) Store(key, value any)
- type RequestContext
Examples ¶
Constants ¶
const SupportPackageIsVersion1 = true
SupportPackageIsVersion1 is a compile-time assertion constant. Downstream packages reference this to enforce version compatibility.
Variables ¶
This section is empty.
Functions ¶
func AddToLogFields ¶ added in v0.3.0
AddToLogFields adds a key-value pair to the log fields stored in ctx. If ctx is nil, context.Background() is used.
func AddToOptions ¶
AddToOptions adds a key-value pair to the Options stored in ctx. If no Options exists in the context, a new one is created. Empty keys are silently ignored and do not allocate.
Example ¶
package main
import (
"context"
"fmt"
"github.com/go-coldbrew/options"
)
func main() {
ctx := context.Background()
// Add request-scoped metadata to context
ctx = options.AddToOptions(ctx, "tenant", "acme-corp")
ctx = options.AddToOptions(ctx, "region", "us-west-2")
// Retrieve values downstream
opts := options.FromContext(ctx)
if tenant, ok := opts.Get("tenant"); ok {
fmt.Println("tenant:", tenant)
}
if region, ok := opts.Get("region"); ok {
fmt.Println("region:", region)
}
}
Output: tenant: acme-corp region: us-west-2
Types ¶
type Options ¶
type Options struct {
// contains filtered or unexported fields
}
Options are request options passed from ColdBrew to server. Uses RWMutex + map instead of sync.Map since Options is per-request and never shared across goroutines.
func FromContext ¶
FromContext fetches options from provided context. If no options are found, it returns nil.
Example ¶
package main
import (
"context"
"fmt"
"github.com/go-coldbrew/options"
)
func main() {
ctx := context.Background()
// Without any options set, FromContext returns nil
opts := options.FromContext(ctx)
fmt.Println("opts:", opts)
}
Output: opts: <nil>
func LogFieldsFromContext ¶ added in v0.3.0
LogFieldsFromContext retrieves the log fields Options from context. Returns nil if not present.
func (*Options) Delete ¶ added in v0.2.7
Delete is a sync.Map-compatible alias for Del. Only string keys are supported; non-string keys are silently ignored.
func (*Options) Load ¶ added in v0.2.7
Load is a sync.Map-compatible alias for Get. Only string keys are supported; non-string keys return (nil, false).
func (*Options) Range ¶ added in v0.2.7
Range calls f sequentially for each key and value. If f returns false, Range stops the iteration. The callback may safely call Add/Del on the same Options instance.
func (*Options) RangeSlice ¶ added in v0.3.0
RangeSlice calls f sequentially for each key and value, using a slice snapshot. This is more efficient than Range for small maps and matches the iteration pattern used by LogFields.
type RequestContext ¶ added in v0.3.0
type RequestContext struct {
// contains filtered or unexported fields
}
RequestContext holds both request-scoped options and log-scoped fields in a single context value, reducing context.WithValue allocations from 2 to 1. Both fields are eagerly initialized to avoid data races from concurrent lazy init.
func RequestContextFromContext ¶ added in v0.3.0
func RequestContextFromContext(ctx context.Context) *RequestContext
RequestContextFromContext retrieves the RequestContext from ctx. Returns nil if not present.
func (*RequestContext) LogFields ¶ added in v0.3.0
func (rc *RequestContext) LogFields() *Options
LogFields returns the Options used for log fields.
func (*RequestContext) Opts ¶ added in v0.3.0
func (rc *RequestContext) Opts() *Options
Opts returns the Options for request-scoped key-value pairs.