/
annotation.go
143 lines (127 loc) · 3.4 KB
/
annotation.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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package parser
import (
"net/http"
"regexp"
"strings"
)
// The list of annotation.
const (
GORS = "@GORS"
Path = "@Path"
GET Method = "@GET"
POST Method = "@POST"
PUT Method = "@PUT"
DELETE Method = "@DELETE"
PATCH Method = "@PATCH"
HEAD Method = "@HEAD"
CONNECT Method = "@CONNECT"
OPTIONS Method = "@OPTIONS"
TRACE Method = "@TRACE"
ReaderBinding Binding = "@ReaderBinding"
BytesBinding Binding = "@BytesBinding"
StringBinding Binding = "@StringBinding"
UriBinding Binding = "@UriBinding"
QueryBinding Binding = "@QueryBinding"
HeaderBinding Binding = "@HeaderBinding"
JSONBinding Binding = "@JSONBinding"
XMLBinding Binding = "@XMLBinding"
FormBinding Binding = "@FormBinding"
FormPostBinding Binding = "@FormPostBinding"
FormMultipartBinding Binding = "@FormMultipartBinding"
ProtoBufBinding Binding = "@ProtoBufBinding"
MsgPackBinding Binding = "@MsgPackBinding"
YAMLBinding Binding = "@YAMLBinding"
TOMLBinding Binding = "@TOMLBinding"
ProtoJSONBinding Binding = "@ProtoJSONBinding"
CustomBinding Binding = "@CustomBinding"
ReaderRender Render = "@ReaderRender"
BytesRender Render = "@BytesRender"
StringRender Render = "@StringRender"
TextRender Render = "@TextRender"
HTMLRender Render = "@HTMLRender"
RedirectRender Render = "@RedirectRender"
JSONRender Render = "@JSONRender"
IndentedJSONRender Render = "@IndentedJSONRender"
SecureJSONRender Render = "@SecureJSONRender"
JSONPJSONRender Render = "@JSONPJSONRender"
PureJSONRender Render = "@PureJSONRender"
AsciiJSONRender Render = "@AsciiJSONRender"
ProtoJSONRender Render = "@ProtoJSONRender"
XMLRender Render = "@XMLRender"
YAMLRender Render = "@YAMLRender"
ProtoBufRender Render = "@ProtoBufRender"
MsgPackRender Render = "@MsgPackRender"
TOMLRender Render = "@TOMLRender"
CustomRender Render = "@CustomRender"
)
type Method string
func (m Method) String() string {
return string(m)
}
func (m Method) EqualsIgnoreCase(str string) bool {
return strings.ToUpper(str) == m.String()
}
func (m Method) HttpMethod() string {
switch m {
case GET:
return "MethodGet"
case POST:
return "MethodPost"
case PUT:
return "MethodPut"
case DELETE:
return "MethodDelete"
case PATCH:
return "MethodPatch"
case HEAD:
return "MethodHead"
case CONNECT:
return "MethodConnect"
case OPTIONS:
return "MethodOptions"
case TRACE:
return "MethodTrace"
default:
return ""
}
}
func (m Method) HttpMethodName() string {
switch m {
case GET:
return http.MethodGet
case POST:
return http.MethodPost
case PUT:
return http.MethodPut
case DELETE:
return http.MethodDelete
case PATCH:
return http.MethodPatch
case HEAD:
return http.MethodHead
case CONNECT:
return http.MethodConnect
case OPTIONS:
return http.MethodOptions
case TRACE:
return http.MethodTrace
default:
return ""
}
}
func ExtractValue(s string, annotation string) (string, bool) {
reg := regexp.MustCompile(annotation + `\((.*)\)`)
if !reg.MatchString(s) {
return "", false
}
matchArr := reg.FindStringSubmatch(s)
return matchArr[len(matchArr)-1], true
}
type Binding string
func (b Binding) String() string {
return string(b)
}
type Render string
func (r Render) String() string {
return string(r)
}