/
header.go
61 lines (55 loc) · 1.31 KB
/
header.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
package engine
import (
"net/http"
"github.com/samuelngs/hyper/fault"
"github.com/samuelngs/hyper/router"
)
// Header struct
type Header struct {
context *Context
}
// Set data to response header
func (v *Header) Set(key string, val string) {
v.context.res.Header().Set(key, val)
}
// Get data from request header
func (v *Header) Get(key string) (router.Value, error) {
for _, param := range v.context.params {
switch {
case param.Config().Name() == key && param.Config().Type() == router.ParamHeader:
for _, value := range v.context.values {
if value.Key() == key {
return value, nil
}
}
case param.Config().Type() == router.ParamOneOf:
for _, param := range param.Config().OneOf() {
if param.Config().Name() == key && param.Config().Type() == router.ParamHeader {
for _, value := range v.context.values {
if value.Key() == key {
return value, nil
}
}
}
}
}
}
err := fault.
New("Illegal Field Entity").
SetStatus(http.StatusUnprocessableEntity).
AddCause(
fault.
For(fault.UnregisteredField).
SetResource(router.ParamHeader.String()).
SetField(key),
)
return nil, err
}
// MustGet data from request header
func (v *Header) MustGet(key string) router.Value {
val, err := v.Get(key)
if err != nil {
panic(err)
}
return val
}