-
Notifications
You must be signed in to change notification settings - Fork 2
/
request.go
37 lines (29 loc) · 1.11 KB
/
request.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package request
import (
"context"
"github.com/rs/xid"
)
// ContextKey is a wrapper type for our keys attached to a context
type ContextKey string
// NewRequestContext creates a new request context from context.Background()
func NewRequestContext() context.Context {
return NewRequestContextFrom(context.Background())
}
// NewRequestContextFrom creates a new request context from an existing context
// regenerating a request_id value
func NewRequestContextFrom(ctx context.Context) context.Context {
return NewRequestContextWithRequestID(ctx, GenerateRequestID())
}
// NewRequestContextWithRequestID creates a new request context from an existing context
// with the provided request id rid
func NewRequestContextWithRequestID(ctx context.Context, rid string) context.Context {
return context.WithValue(ctx, ContextKey("request_id"), rid)
}
// GenerateRequestID generates a new random-enough request id for a request context
func GenerateRequestID() string {
return xid.New().String()
}
func GetRequestID(ctx context.Context) (string, bool) {
rid, ok := ctx.Value(ContextKey("request_id")).(string)
return rid, ok
}