-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcontext.go
59 lines (49 loc) · 1.79 KB
/
context.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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package request
import "context"
// ContextKey - тип строки для ключей контекста
type ContextKey string
// ключи контекста
const (
ContextKeyRequestID ContextKey = "request_id"
ContextKeySessionUsername ContextKey = "session_username"
ContextKeySessionToken ContextKey = "session_token"
)
// Context - обобщенная структура данных и обертка над стандартным контекстом
type Context struct {
ctx context.Context
}
// NewContext - функция возвращает указатель на контекст запроса
func NewContext(ctx context.Context) *Context {
return &Context{
ctx: ctx,
}
}
// Context - возвращает типовой контекст
func (ctx *Context) Context() context.Context {
return ctx.ctx
}
// Функция извлекает из контекста информацию о требуемом ключе
func (ctx *Context) contextFetchStringValue(key ContextKey) string {
if ctx.ctx == nil {
return ""
}
if value := ctx.ctx.Value(key); value != nil {
res, ok := value.(string)
if ok {
return res
}
}
return ""
}
// RequestID - функция возвращает request_id из контекста запроса
func (ctx *Context) RequestID() string {
return ctx.contextFetchStringValue(ContextKeyRequestID)
}
// SessionUsername - функция возвращает session_username за контекста запроса
func (ctx *Context) SessionUsername() string {
return ctx.contextFetchStringValue(ContextKeySessionUsername)
}
// SessionToken - функция возвращает session_token за контекста запроса
func (ctx *Context) SessionToken() string {
return ctx.contextFetchStringValue(ContextKeySessionToken)
}