forked from GoogleCloudPlatform/k8s-stackdriver
/
context.go
65 lines (52 loc) · 2.1 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
60
61
62
63
64
65
/*
Copyright 2017 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package context
import (
"k8s.io/apiserver/pkg/endpoints/request"
)
// requestInformation holds the resource and method for a request in the context.
type requestInformation struct {
resource string
method string
}
type requestListInformation struct {
method string
}
// contextKey is the type of the keys for the context in this file.
// It's private to avoid conflicts across packages.
type contextKey int
const resourceKey contextKey = iota
// WithRequestInformation returns a copy of parent in which the resource and method values are set
func WithRequestInformation(parent request.Context, resource, method string) request.Context {
return request.WithValue(parent, resourceKey, requestInformation{resource, method})
}
// WithRequestListInformation returns a copy of parent in which the method values is set
func WithRequestListInformation(parent request.Context, method string) request.Context {
return request.WithValue(parent, resourceKey, requestListInformation{method})
}
// RequestInformationFrom returns resource and method on the ctx
func RequestInformationFrom(ctx request.Context) (resource string, method string, ok bool) {
requestInfo, ok := ctx.Value(resourceKey).(requestInformation)
if !ok {
return "", "", ok
}
return requestInfo.resource, requestInfo.method, ok
}
// RequestListInformationFrom returns method on the ctx
func RequestListInformationFrom(ctx request.Context) (method string, ok bool) {
requestInfo, ok := ctx.Value(resourceKey).(requestListInformation)
if !ok {
return "", ok
}
return requestInfo.method, ok
}