Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
e11f62cf
Commit
e11f62cf
authored
Mar 12, 2015
by
nikhiljindal
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Updating go-restful to the latest version
parent
07c20356
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
305 additions
and
103 deletions
+305
-103
Godeps.json
Godeps/Godeps.json
+2
-2
README.md
...s/_workspace/src/github.com/emicklei/go-restful/README.md
+1
-0
container.go
...workspace/src/github.com/emicklei/go-restful/container.go
+39
-1
container_test.go
...pace/src/github.com/emicklei/go-restful/container_test.go
+21
-0
cors_filter.go
...rkspace/src/github.com/emicklei/go-restful/cors_filter.go
+4
-2
restful-routefunction_test.go
...micklei/go-restful/examples/restful-routefunction_test.go
+4
-4
jsr311_test.go
...rkspace/src/github.com/emicklei/go-restful/jsr311_test.go
+8
-32
options_filter.go
...pace/src/github.com/emicklei/go-restful/options_filter.go
+1
-1
path_expression.go
...ace/src/github.com/emicklei/go-restful/path_expression.go
+15
-2
path_expression_test.go
...rc/github.com/emicklei/go-restful/path_expression_test.go
+37
-0
route.go
...ps/_workspace/src/github.com/emicklei/go-restful/route.go
+1
-0
route_builder.go
...space/src/github.com/emicklei/go-restful/route_builder.go
+8
-0
config.go
...pace/src/github.com/emicklei/go-restful/swagger/config.go
+2
-0
model_builder.go
...c/github.com/emicklei/go-restful/swagger/model_builder.go
+8
-2
model_builder_test.go
...hub.com/emicklei/go-restful/swagger/model_builder_test.go
+77
-49
resource_sorter.go
...github.com/emicklei/go-restful/swagger/resource_sorter.go
+19
-0
swagger.go
...ace/src/github.com/emicklei/go-restful/swagger/swagger.go
+1
-1
swagger_test.go
...rc/github.com/emicklei/go-restful/swagger/swagger_test.go
+2
-2
swagger_webservice.go
...hub.com/emicklei/go-restful/swagger/swagger_webservice.go
+19
-2
utils_test.go
.../src/github.com/emicklei/go-restful/swagger/utils_test.go
+6
-3
web_service.go
...rkspace/src/github.com/emicklei/go-restful/web_service.go
+30
-0
No files found.
Godeps/Godeps.json
View file @
e11f62cf
...
@@ -151,8 +151,8 @@
...
@@ -151,8 +151,8 @@
},
},
{
{
"ImportPath"
:
"github.com/emicklei/go-restful"
,
"ImportPath"
:
"github.com/emicklei/go-restful"
,
"Comment"
:
"v1.1.
2-50-g692a50
0"
,
"Comment"
:
"v1.1.
3-9-g49e08a
0"
,
"Rev"
:
"
692a50017a7049b26cf7ea4ccfc0d8c77369a793
"
"Rev"
:
"
49e08a07d31e2dae8005f28b5360a96746cd6365
"
},
},
{
{
"ImportPath"
:
"github.com/evanphx/json-patch"
,
"ImportPath"
:
"github.com/evanphx/json-patch"
,
...
...
Godeps/_workspace/src/github.com/emicklei/go-restful/README.md
View file @
e11f62cf
...
@@ -52,6 +52,7 @@ func (u UserResource) findUser(request *restful.Request, response *restful.Respo
...
@@ -52,6 +52,7 @@ func (u UserResource) findUser(request *restful.Request, response *restful.Respo
-
Automatic CORS request handling (using a filter)
-
Automatic CORS request handling (using a filter)
-
API declaration for Swagger UI (see swagger package)
-
API declaration for Swagger UI (see swagger package)
-
Panic recovery to produce HTTP 500, customizable using RecoverHandler(...)
-
Panic recovery to produce HTTP 500, customizable using RecoverHandler(...)
-
Route errors produce HTTP 404/405/406/415 errors, customizable using ServiceErrorHandler(...)
### Resources
### Resources
...
...
Godeps/_workspace/src/github.com/emicklei/go-restful/container.go
View file @
e11f62cf
...
@@ -22,6 +22,7 @@ type Container struct {
...
@@ -22,6 +22,7 @@ type Container struct {
containerFilters
[]
FilterFunction
containerFilters
[]
FilterFunction
doNotRecover
bool
// default is false
doNotRecover
bool
// default is false
recoverHandleFunc
RecoverHandleFunction
recoverHandleFunc
RecoverHandleFunction
serviceErrorHandleFunc
ServiceErrorHandleFunction
router
RouteSelector
// default is a RouterJSR311, CurlyRouter is the faster alternative
router
RouteSelector
// default is a RouterJSR311, CurlyRouter is the faster alternative
contentEncodingEnabled
bool
// default is false
contentEncodingEnabled
bool
// default is false
}
}
...
@@ -35,6 +36,7 @@ func NewContainer() *Container {
...
@@ -35,6 +36,7 @@ func NewContainer() *Container {
containerFilters
:
[]
FilterFunction
{},
containerFilters
:
[]
FilterFunction
{},
doNotRecover
:
false
,
doNotRecover
:
false
,
recoverHandleFunc
:
logStackOnRecover
,
recoverHandleFunc
:
logStackOnRecover
,
serviceErrorHandleFunc
:
writeServiceError
,
router
:
RouterJSR311
{},
router
:
RouterJSR311
{},
contentEncodingEnabled
:
false
}
contentEncodingEnabled
:
false
}
}
}
...
@@ -49,6 +51,16 @@ func (c *Container) RecoverHandler(handler RecoverHandleFunction) {
...
@@ -49,6 +51,16 @@ func (c *Container) RecoverHandler(handler RecoverHandleFunction) {
c
.
recoverHandleFunc
=
handler
c
.
recoverHandleFunc
=
handler
}
}
// ServiceErrorHandleFunction declares functions that can be used to handle a service error situation.
// The first argument is the service error. The second must be used to communicate an error response.
type
ServiceErrorHandleFunction
func
(
ServiceError
,
*
Response
)
// ServiceErrorHandler changes the default function (writeServiceError) to be called
// when a ServiceError is detected.
func
(
c
*
Container
)
ServiceErrorHandler
(
handler
ServiceErrorHandleFunction
)
{
c
.
serviceErrorHandleFunc
=
handler
}
// DoNotRecover controls whether panics will be caught to return HTTP 500.
// DoNotRecover controls whether panics will be caught to return HTTP 500.
// If set to true, Route functions are responsible for handling any error situation.
// If set to true, Route functions are responsible for handling any error situation.
// Default value is false = recover from panics. This has performance implications.
// Default value is false = recover from panics. This has performance implications.
...
@@ -125,6 +137,13 @@ func logStackOnRecover(panicReason interface{}, httpWriter http.ResponseWriter)
...
@@ -125,6 +137,13 @@ func logStackOnRecover(panicReason interface{}, httpWriter http.ResponseWriter)
httpWriter
.
Write
(
buffer
.
Bytes
())
httpWriter
.
Write
(
buffer
.
Bytes
())
}
}
// writeServiceError is the default ServiceErrorHandleFunction and is called
// when a ServiceError is returned during route selection. Default implementation
// calls resp.WriteErrorString(err.Code, err.Message)
func
writeServiceError
(
err
ServiceError
,
resp
*
Response
)
{
resp
.
WriteErrorString
(
err
.
Code
,
err
.
Message
)
}
// Dispatch the incoming Http Request to a matching WebService.
// Dispatch the incoming Http Request to a matching WebService.
func
(
c
*
Container
)
dispatch
(
httpWriter
http
.
ResponseWriter
,
httpRequest
*
http
.
Request
)
{
func
(
c
*
Container
)
dispatch
(
httpWriter
http
.
ResponseWriter
,
httpRequest
*
http
.
Request
)
{
// Instal panic recovery unless told otherwise
// Instal panic recovery unless told otherwise
...
@@ -172,7 +191,7 @@ func (c *Container) dispatch(httpWriter http.ResponseWriter, httpRequest *http.R
...
@@ -172,7 +191,7 @@ func (c *Container) dispatch(httpWriter http.ResponseWriter, httpRequest *http.R
switch
err
.
(
type
)
{
switch
err
.
(
type
)
{
case
ServiceError
:
case
ServiceError
:
ser
:=
err
.
(
ServiceError
)
ser
:=
err
.
(
ServiceError
)
resp
.
WriteErrorString
(
ser
.
Code
,
ser
.
Message
)
c
.
serviceErrorHandleFunc
(
ser
,
resp
)
}
}
// TODO
// TODO
}}
}}
...
@@ -217,6 +236,25 @@ func (c Container) Handle(pattern string, handler http.Handler) {
...
@@ -217,6 +236,25 @@ func (c Container) Handle(pattern string, handler http.Handler) {
c
.
ServeMux
.
Handle
(
pattern
,
handler
)
c
.
ServeMux
.
Handle
(
pattern
,
handler
)
}
}
// HandleWithFilter registers the handler for the given pattern.
// Container's filter chain is applied for handler.
// If a handler already exists for pattern, HandleWithFilter panics.
func
(
c
Container
)
HandleWithFilter
(
pattern
string
,
handler
http
.
Handler
)
{
f
:=
func
(
httpResponse
http
.
ResponseWriter
,
httpRequest
*
http
.
Request
)
{
if
len
(
c
.
containerFilters
)
==
0
{
handler
.
ServeHTTP
(
httpResponse
,
httpRequest
)
return
}
chain
:=
FilterChain
{
Filters
:
c
.
containerFilters
,
Target
:
func
(
req
*
Request
,
resp
*
Response
)
{
handler
.
ServeHTTP
(
httpResponse
,
httpRequest
)
}}
chain
.
ProcessFilter
(
NewRequest
(
httpRequest
),
NewResponse
(
httpResponse
))
}
c
.
Handle
(
pattern
,
http
.
HandlerFunc
(
f
))
}
// Filter appends a container FilterFunction. These are called before dispatching
// Filter appends a container FilterFunction. These are called before dispatching
// a http.Request to a WebService from the container
// a http.Request to a WebService from the container
func
(
c
*
Container
)
Filter
(
filter
FilterFunction
)
{
func
(
c
*
Container
)
Filter
(
filter
FilterFunction
)
{
...
...
Godeps/_workspace/src/github.com/emicklei/go-restful/container_test.go
0 → 100644
View file @
e11f62cf
package
restful
import
(
"net/http"
"testing"
)
// go test -v -test.run TestContainer_computeAllowedMethods ...restful
func
TestContainer_computeAllowedMethods
(
t
*
testing
.
T
)
{
wc
:=
NewContainer
()
ws1
:=
new
(
WebService
)
.
Path
(
"/users"
)
ws1
.
Route
(
ws1
.
GET
(
"{i}"
)
.
To
(
dummy
))
ws1
.
Route
(
ws1
.
POST
(
"{i}"
)
.
To
(
dummy
))
wc
.
Add
(
ws1
)
httpRequest
,
_
:=
http
.
NewRequest
(
"GET"
,
"http://api.his.com/users/1"
,
nil
)
rreq
:=
Request
{
Request
:
httpRequest
}
m
:=
wc
.
computeAllowedMethods
(
&
rreq
)
if
len
(
m
)
!=
2
{
t
.
Errorf
(
"got %d expected 2 methods, %v"
,
len
(
m
),
m
)
}
}
Godeps/_workspace/src/github.com/emicklei/go-restful/cors_filter.go
View file @
e11f62cf
...
@@ -47,7 +47,7 @@ func (c CrossOriginResourceSharing) Filter(req *Request, resp *Response, chain *
...
@@ -47,7 +47,7 @@ func (c CrossOriginResourceSharing) Filter(req *Request, resp *Response, chain *
}
}
if
!
included
{
if
!
included
{
if
trace
{
if
trace
{
traceLogger
.
Print
ln
(
"HTTP Origin:%s is not part of %v"
,
origin
,
c
.
AllowedDomains
)
traceLogger
.
Print
f
(
"HTTP Origin:%s is not part of %v"
,
origin
,
c
.
AllowedDomains
)
}
}
chain
.
ProcessFilter
(
req
,
resp
)
chain
.
ProcessFilter
(
req
,
resp
)
return
return
...
@@ -62,6 +62,8 @@ func (c CrossOriginResourceSharing) Filter(req *Request, resp *Response, chain *
...
@@ -62,6 +62,8 @@ func (c CrossOriginResourceSharing) Filter(req *Request, resp *Response, chain *
c
.
doPreflightRequest
(
req
,
resp
)
c
.
doPreflightRequest
(
req
,
resp
)
}
else
{
}
else
{
c
.
doActualRequest
(
req
,
resp
)
c
.
doActualRequest
(
req
,
resp
)
chain
.
ProcessFilter
(
req
,
resp
)
return
}
}
}
}
...
@@ -70,7 +72,7 @@ func (c CrossOriginResourceSharing) doActualRequest(req *Request, resp *Response
...
@@ -70,7 +72,7 @@ func (c CrossOriginResourceSharing) doActualRequest(req *Request, resp *Response
// continue processing the response
// continue processing the response
}
}
func
(
c
CrossOriginResourceSharing
)
doPreflightRequest
(
req
*
Request
,
resp
*
Response
)
{
func
(
c
*
CrossOriginResourceSharing
)
doPreflightRequest
(
req
*
Request
,
resp
*
Response
)
{
if
len
(
c
.
AllowedMethods
)
==
0
{
if
len
(
c
.
AllowedMethods
)
==
0
{
c
.
AllowedMethods
=
c
.
Container
.
computeAllowedMethods
(
req
)
c
.
AllowedMethods
=
c
.
Container
.
computeAllowedMethods
(
req
)
}
}
...
...
Godeps/_workspace/src/github.com/emicklei/go-restful/examples/restful-routefunction_test.go
View file @
e11f62cf
...
@@ -12,7 +12,7 @@ import (
...
@@ -12,7 +12,7 @@ import (
// It uses the httptest.ResponseRecorder to capture output
// It uses the httptest.ResponseRecorder to capture output
func
getIt
(
req
*
restful
.
Request
,
resp
*
restful
.
Response
)
{
func
getIt
(
req
*
restful
.
Request
,
resp
*
restful
.
Response
)
{
resp
.
WriteHeader
(
4
04
)
resp
.
WriteHeader
(
2
04
)
}
}
func
TestCallFunction
(
t
*
testing
.
T
)
{
func
TestCallFunction
(
t
*
testing
.
T
)
{
...
@@ -20,10 +20,10 @@ func TestCallFunction(t *testing.T) {
...
@@ -20,10 +20,10 @@ func TestCallFunction(t *testing.T) {
req
:=
restful
.
NewRequest
(
httpReq
)
req
:=
restful
.
NewRequest
(
httpReq
)
recorder
:=
new
(
httptest
.
ResponseRecorder
)
recorder
:=
new
(
httptest
.
ResponseRecorder
)
resp
:=
restful
.
NewResponse
(
recoder
)
resp
:=
restful
.
NewResponse
(
reco
r
der
)
getIt
(
req
,
resp
)
getIt
(
req
,
resp
)
if
recorder
.
Code
!=
4
04
{
if
recorder
.
Code
!=
2
04
{
t
.
Log
f
(
"Missing or wrong status code:%d"
,
recorder
.
Code
)
t
.
Fatal
f
(
"Missing or wrong status code:%d"
,
recorder
.
Code
)
}
}
}
}
Godeps/_workspace/src/github.com/emicklei/go-restful/jsr311_test.go
View file @
e11f62cf
...
@@ -66,6 +66,14 @@ func TestDetectDispatcher(t *testing.T) {
...
@@ -66,6 +66,14 @@ func TestDetectDispatcher(t *testing.T) {
// Step 2 tests
// Step 2 tests
//
//
// go test -v -test.run TestISSUE_179 ...restful
func
TestISSUE_179
(
t
*
testing
.
T
)
{
ws1
:=
new
(
WebService
)
ws1
.
Route
(
ws1
.
GET
(
"/v1/category/{param:*}"
)
.
To
(
dummy
))
routes
:=
RouterJSR311
{}
.
selectRoutes
(
ws1
,
"/v1/category/sub/sub"
)
t
.
Logf
(
"%v"
,
routes
)
}
// go test -v -test.run TestISSUE_30 ...restful
// go test -v -test.run TestISSUE_30 ...restful
func
TestISSUE_30
(
t
*
testing
.
T
)
{
func
TestISSUE_30
(
t
*
testing
.
T
)
{
ws1
:=
new
(
WebService
)
.
Path
(
"/users"
)
ws1
:=
new
(
WebService
)
.
Path
(
"/users"
)
...
@@ -181,38 +189,6 @@ func containsRoutePath(routes []Route, path string, t *testing.T) bool {
...
@@ -181,38 +189,6 @@ func containsRoutePath(routes []Route, path string, t *testing.T) bool {
return
false
return
false
}
}
var
tempregexs
=
[]
struct
{
template
,
regex
string
literalCount
,
varCount
int
}{
{
""
,
"^(/.*)?$"
,
0
,
0
},
{
"/a/{b}/c/"
,
"^/a/([^/]+?)/c(/.*)?$"
,
2
,
1
},
{
"/{a}/{b}/{c-d-e}/"
,
"^/([^/]+?)/([^/]+?)/([^/]+?)(/.*)?$"
,
0
,
3
},
{
"/{p}/abcde"
,
"^/([^/]+?)/abcde(/.*)?$"
,
5
,
1
},
}
func
TestTemplateToRegularExpression
(
t
*
testing
.
T
)
{
ok
:=
true
for
i
,
fixture
:=
range
tempregexs
{
actual
,
lCount
,
vCount
,
_
:=
templateToRegularExpression
(
fixture
.
template
)
if
actual
!=
fixture
.
regex
{
t
.
Logf
(
"regex mismatch, expected:%v , actual:%v, line:%v
\n
"
,
fixture
.
regex
,
actual
,
i
)
// 11 = where the data starts
ok
=
false
}
if
lCount
!=
fixture
.
literalCount
{
t
.
Logf
(
"literal count mismatch, expected:%v , actual:%v, line:%v
\n
"
,
fixture
.
literalCount
,
lCount
,
i
)
ok
=
false
}
if
vCount
!=
fixture
.
varCount
{
t
.
Logf
(
"variable count mismatch, expected:%v , actual:%v, line:%v
\n
"
,
fixture
.
varCount
,
vCount
,
i
)
ok
=
false
}
}
if
!
ok
{
t
.
Fatal
(
"one or more expression did not match"
)
}
}
// go test -v -test.run TestSortableRouteCandidates ...restful
// go test -v -test.run TestSortableRouteCandidates ...restful
func
TestSortableRouteCandidates
(
t
*
testing
.
T
)
{
func
TestSortableRouteCandidates
(
t
*
testing
.
T
)
{
fixture
:=
&
sortableRouteCandidates
{}
fixture
:=
&
sortableRouteCandidates
{}
...
...
Godeps/_workspace/src/github.com/emicklei/go-restful/options_filter.go
View file @
e11f62cf
...
@@ -9,7 +9,7 @@ import "strings"
...
@@ -9,7 +9,7 @@ import "strings"
// OPTIONSFilter is a filter function that inspects the Http Request for the OPTIONS method
// OPTIONSFilter is a filter function that inspects the Http Request for the OPTIONS method
// and provides the response with a set of allowed methods for the request URL Path.
// and provides the response with a set of allowed methods for the request URL Path.
// As for any filter, you can also install it for a particular WebService within a Container
// As for any filter, you can also install it for a particular WebService within a Container
func
(
c
Container
)
OPTIONSFilter
(
req
*
Request
,
resp
*
Response
,
chain
*
FilterChain
)
{
func
(
c
*
Container
)
OPTIONSFilter
(
req
*
Request
,
resp
*
Response
,
chain
*
FilterChain
)
{
if
"OPTIONS"
!=
req
.
Request
.
Method
{
if
"OPTIONS"
!=
req
.
Request
.
Method
{
chain
.
ProcessFilter
(
req
,
resp
)
chain
.
ProcessFilter
(
req
,
resp
)
return
return
...
...
Godeps/_workspace/src/github.com/emicklei/go-restful/path_expression.go
View file @
e11f62cf
...
@@ -6,6 +6,7 @@ package restful
...
@@ -6,6 +6,7 @@ package restful
import
(
import
(
"bytes"
"bytes"
"fmt"
"regexp"
"regexp"
"strings"
"strings"
)
)
...
@@ -43,9 +44,21 @@ func templateToRegularExpression(template string) (expression string, literalCou
...
@@ -43,9 +44,21 @@ func templateToRegularExpression(template string) (expression string, literalCou
}
}
buffer
.
WriteString
(
"/"
)
buffer
.
WriteString
(
"/"
)
if
strings
.
HasPrefix
(
each
,
"{"
)
{
if
strings
.
HasPrefix
(
each
,
"{"
)
{
// ignore var spec
// check for regular expression in variable
colon
:=
strings
.
Index
(
each
,
":"
)
if
colon
!=
-
1
{
// extract expression
paramExpr
:=
strings
.
TrimSpace
(
each
[
colon
+
1
:
len
(
each
)
-
1
])
if
paramExpr
==
"*"
{
// special case
buffer
.
WriteString
(
"(.*)"
)
}
else
{
buffer
.
WriteString
(
fmt
.
Sprintf
(
"(%s)"
,
paramExpr
))
// between colon and closing moustache
}
}
else
{
// plain var
buffer
.
WriteString
(
"([^/]+?)"
)
}
varCount
+=
1
varCount
+=
1
buffer
.
WriteString
(
"([^/]+?)"
)
}
else
{
}
else
{
literalCount
+=
len
(
each
)
literalCount
+=
len
(
each
)
encoded
:=
each
// TODO URI encode
encoded
:=
each
// TODO URI encode
...
...
Godeps/_workspace/src/github.com/emicklei/go-restful/path_expression_test.go
0 → 100644
View file @
e11f62cf
package
restful
import
"testing"
var
tempregexs
=
[]
struct
{
template
,
regex
string
literalCount
,
varCount
int
}{
{
""
,
"^(/.*)?$"
,
0
,
0
},
{
"/a/{b}/c/"
,
"^/a/([^/]+?)/c(/.*)?$"
,
2
,
1
},
{
"/{a}/{b}/{c-d-e}/"
,
"^/([^/]+?)/([^/]+?)/([^/]+?)(/.*)?$"
,
0
,
3
},
{
"/{p}/abcde"
,
"^/([^/]+?)/abcde(/.*)?$"
,
5
,
1
},
{
"/a/{b:*}"
,
"^/a/(.*)(/.*)?$"
,
1
,
1
},
{
"/a/{b:[a-z]+}"
,
"^/a/([a-z]+)(/.*)?$"
,
1
,
1
},
}
func
TestTemplateToRegularExpression
(
t
*
testing
.
T
)
{
ok
:=
true
for
i
,
fixture
:=
range
tempregexs
{
actual
,
lCount
,
vCount
,
_
:=
templateToRegularExpression
(
fixture
.
template
)
if
actual
!=
fixture
.
regex
{
t
.
Logf
(
"regex mismatch, expected:%v , actual:%v, line:%v
\n
"
,
fixture
.
regex
,
actual
,
i
)
// 11 = where the data starts
ok
=
false
}
if
lCount
!=
fixture
.
literalCount
{
t
.
Logf
(
"literal count mismatch, expected:%v , actual:%v, line:%v
\n
"
,
fixture
.
literalCount
,
lCount
,
i
)
ok
=
false
}
if
vCount
!=
fixture
.
varCount
{
t
.
Logf
(
"variable count mismatch, expected:%v , actual:%v, line:%v
\n
"
,
fixture
.
varCount
,
vCount
,
i
)
ok
=
false
}
}
if
!
ok
{
t
.
Fatal
(
"one or more expression did not match"
)
}
}
Godeps/_workspace/src/github.com/emicklei/go-restful/route.go
View file @
e11f62cf
...
@@ -29,6 +29,7 @@ type Route struct {
...
@@ -29,6 +29,7 @@ type Route struct {
// documentation
// documentation
Doc
string
Doc
string
Notes
string
Operation
string
Operation
string
ParameterDocs
[]
*
Parameter
ParameterDocs
[]
*
Parameter
ResponseErrors
map
[
int
]
ResponseError
ResponseErrors
map
[
int
]
ResponseError
...
...
Godeps/_workspace/src/github.com/emicklei/go-restful/route_builder.go
View file @
e11f62cf
...
@@ -21,6 +21,7 @@ type RouteBuilder struct {
...
@@ -21,6 +21,7 @@ type RouteBuilder struct {
filters
[]
FilterFunction
filters
[]
FilterFunction
// documentation
// documentation
doc
string
doc
string
notes
string
operation
string
operation
string
readSample
,
writeSample
interface
{}
readSample
,
writeSample
interface
{}
parameters
[]
*
Parameter
parameters
[]
*
Parameter
...
@@ -79,6 +80,12 @@ func (b *RouteBuilder) Doc(documentation string) *RouteBuilder {
...
@@ -79,6 +80,12 @@ func (b *RouteBuilder) Doc(documentation string) *RouteBuilder {
return
b
return
b
}
}
// A verbose explanation of the operation behavior. Optional.
func
(
b
*
RouteBuilder
)
Notes
(
notes
string
)
*
RouteBuilder
{
b
.
notes
=
notes
return
b
}
// Reads tells what resource type will be read from the request payload. Optional.
// Reads tells what resource type will be read from the request payload. Optional.
// A parameter of type "body" is added ,required is set to true and the dataType is set to the qualified name of the sample's type.
// A parameter of type "body" is added ,required is set to true and the dataType is set to the qualified name of the sample's type.
func
(
b
*
RouteBuilder
)
Reads
(
sample
interface
{})
*
RouteBuilder
{
func
(
b
*
RouteBuilder
)
Reads
(
sample
interface
{})
*
RouteBuilder
{
...
@@ -194,6 +201,7 @@ func (b *RouteBuilder) Build() Route {
...
@@ -194,6 +201,7 @@ func (b *RouteBuilder) Build() Route {
relativePath
:
b
.
currentPath
,
relativePath
:
b
.
currentPath
,
pathExpr
:
pathExpr
,
pathExpr
:
pathExpr
,
Doc
:
b
.
doc
,
Doc
:
b
.
doc
,
Notes
:
b
.
notes
,
Operation
:
b
.
operation
,
Operation
:
b
.
operation
,
ParameterDocs
:
b
.
parameters
,
ParameterDocs
:
b
.
parameters
,
ResponseErrors
:
b
.
errorMap
,
ResponseErrors
:
b
.
errorMap
,
...
...
Godeps/_workspace/src/github.com/emicklei/go-restful/swagger/config.go
View file @
e11f62cf
...
@@ -22,4 +22,6 @@ type Config struct {
...
@@ -22,4 +22,6 @@ type Config struct {
StaticHandler
http
.
Handler
StaticHandler
http
.
Handler
// [optional] on default CORS (Cross-Origin-Resource-Sharing) is enabled.
// [optional] on default CORS (Cross-Origin-Resource-Sharing) is enabled.
DisableCORS
bool
DisableCORS
bool
// Top-level API version. Is reflected in the resource listing.
ApiVersion
string
}
}
Godeps/_workspace/src/github.com/emicklei/go-restful/swagger/model_builder.go
View file @
e11f62cf
...
@@ -168,8 +168,11 @@ func (b modelBuilder) buildArrayTypeProperty(field reflect.StructField, jsonName
...
@@ -168,8 +168,11 @@ func (b modelBuilder) buildArrayTypeProperty(field reflect.StructField, jsonName
var
pType
=
"array"
var
pType
=
"array"
prop
.
Type
=
&
pType
prop
.
Type
=
&
pType
elemName
:=
b
.
getElementTypeName
(
modelName
,
jsonName
,
fieldType
.
Elem
())
elemName
:=
b
.
getElementTypeName
(
modelName
,
jsonName
,
fieldType
.
Elem
())
prop
.
Items
=
[]
Item
{
Item
{
Ref
:
&
elemName
}
}
prop
.
Items
=
&
Item
{
Ref
:
&
elemName
}
// add|overwrite model for element type
// add|overwrite model for element type
if
fieldType
.
Elem
()
.
Kind
()
==
reflect
.
Ptr
{
fieldType
=
fieldType
.
Elem
()
}
b
.
addModel
(
fieldType
.
Elem
(),
elemName
)
b
.
addModel
(
fieldType
.
Elem
(),
elemName
)
return
jsonName
,
prop
return
jsonName
,
prop
}
}
...
@@ -182,7 +185,7 @@ func (b modelBuilder) buildPointerTypeProperty(field reflect.StructField, jsonNa
...
@@ -182,7 +185,7 @@ func (b modelBuilder) buildPointerTypeProperty(field reflect.StructField, jsonNa
var
pType
=
"array"
var
pType
=
"array"
prop
.
Type
=
&
pType
prop
.
Type
=
&
pType
elemName
:=
b
.
getElementTypeName
(
modelName
,
jsonName
,
fieldType
.
Elem
()
.
Elem
())
elemName
:=
b
.
getElementTypeName
(
modelName
,
jsonName
,
fieldType
.
Elem
()
.
Elem
())
prop
.
Items
=
[]
Item
{
Item
{
Ref
:
&
elemName
}
}
prop
.
Items
=
&
Item
{
Ref
:
&
elemName
}
// add|overwrite model for element type
// add|overwrite model for element type
b
.
addModel
(
fieldType
.
Elem
()
.
Elem
(),
elemName
)
b
.
addModel
(
fieldType
.
Elem
()
.
Elem
(),
elemName
)
}
else
{
}
else
{
...
@@ -200,6 +203,9 @@ func (b modelBuilder) buildPointerTypeProperty(field reflect.StructField, jsonNa
...
@@ -200,6 +203,9 @@ func (b modelBuilder) buildPointerTypeProperty(field reflect.StructField, jsonNa
}
}
func
(
b
modelBuilder
)
getElementTypeName
(
modelName
,
jsonName
string
,
t
reflect
.
Type
)
string
{
func
(
b
modelBuilder
)
getElementTypeName
(
modelName
,
jsonName
string
,
t
reflect
.
Type
)
string
{
if
t
.
Kind
()
==
reflect
.
Ptr
{
return
t
.
String
()[
1
:
]
}
if
t
.
Name
()
==
""
{
if
t
.
Name
()
==
""
{
return
modelName
+
"."
+
jsonName
return
modelName
+
"."
+
jsonName
}
}
...
...
Godeps/_workspace/src/github.com/emicklei/go-restful/swagger/model_builder_test.go
View file @
e11f62cf
...
@@ -95,11 +95,9 @@ func TestS2(t *testing.T) {
...
@@ -95,11 +95,9 @@ func TestS2(t *testing.T) {
"properties": {
"properties": {
"Ids": {
"Ids": {
"type": "array",
"type": "array",
"items": [
"items": {
{
"$ref": "string"
"$ref": "string"
}
}
]
}
}
}
}
}
}
...
@@ -177,11 +175,9 @@ func TestSampleToModelAsJson(t *testing.T) {
...
@@ -177,11 +175,9 @@ func TestSampleToModelAsJson(t *testing.T) {
},
},
"items": {
"items": {
"type": "array",
"type": "array",
"items": [
"items": {
{
"$ref": "swagger.item"
"$ref": "swagger.item"
}
}
]
},
},
"root": {
"root": {
"type": "swagger.item",
"type": "swagger.item",
...
@@ -361,11 +357,9 @@ func TestAnonymousArrayStruct(t *testing.T) {
...
@@ -361,11 +357,9 @@ func TestAnonymousArrayStruct(t *testing.T) {
"properties": {
"properties": {
"A": {
"A": {
"type": "array",
"type": "array",
"items": [
"items": {
{
"$ref": "swagger.X.A"
"$ref": "swagger.X.A"
}
}
]
}
}
}
}
},
},
...
@@ -402,11 +396,9 @@ func TestAnonymousPtrArrayStruct(t *testing.T) {
...
@@ -402,11 +396,9 @@ func TestAnonymousPtrArrayStruct(t *testing.T) {
"properties": {
"properties": {
"A": {
"A": {
"type": "array",
"type": "array",
"items": [
"items": {
{
"$ref": "swagger.X.A"
"$ref": "swagger.X.A"
}
}
]
}
}
}
}
},
},
...
@@ -467,11 +459,9 @@ func TestIssue85(t *testing.T) {
...
@@ -467,11 +459,9 @@ func TestIssue85(t *testing.T) {
"properties": {
"properties": {
"Datasets": {
"Datasets": {
"type": "array",
"type": "array",
"items": [
"items": {
{
"$ref": "swagger.Dataset"
"$ref": "swagger.Dataset"
}
}
]
}
}
}
}
},
},
...
@@ -483,11 +473,9 @@ func TestIssue85(t *testing.T) {
...
@@ -483,11 +473,9 @@ func TestIssue85(t *testing.T) {
"properties": {
"properties": {
"Names": {
"Names": {
"type": "array",
"type": "array",
"items": [
"items": {
{
"$ref": "string"
"$ref": "string"
}
}
]
}
}
}
}
}
}
...
@@ -511,25 +499,17 @@ func TestRecursiveStructure(t *testing.T) {
...
@@ -511,25 +499,17 @@ func TestRecursiveStructure(t *testing.T) {
"properties": {
"properties": {
"History": {
"History": {
"type": "array",
"type": "array",
"items": [
"items": {
{
"$ref": "swagger.File"
"$ref": "swagger.File"
}
}
]
},
},
"HistoryPtrs": {
"HistoryPtrs": {
"type": "array",
"type": "array",
"items": [
"items": {
{
"$ref": "swagger.File"
"$ref": "swagger.File.HistoryPtrs"
}
}
]
}
}
}
}
},
"swagger.File.HistoryPtrs": {
"id": "swagger.File.HistoryPtrs",
"properties": {}
}
}
}`
)
}`
)
}
}
...
@@ -669,11 +649,9 @@ func TestRegion_Issue113(t *testing.T) {
...
@@ -669,11 +649,9 @@ func TestRegion_Issue113(t *testing.T) {
"properties": {
"properties": {
"id": {
"id": {
"type": "array",
"type": "array",
"items": [
"items": {
{
"$ref": "integer"
"$ref": "integer"
}
}
]
},
},
"name": {
"name": {
"type": "string"
"type": "string"
...
@@ -727,3 +705,53 @@ func TestIssue158(t *testing.T) {
...
@@ -727,3 +705,53 @@ func TestIssue158(t *testing.T) {
}`
}`
testJsonFromStruct
(
t
,
Customer
{},
expected
)
testJsonFromStruct
(
t
,
Customer
{},
expected
)
}
}
func
TestSlices
(
t
*
testing
.
T
)
{
type
Address
struct
{
Country
string
`json:"country,omitempty"`
}
expected
:=
`{
"swagger.Address": {
"id": "swagger.Address",
"properties": {
"country": {
"type": "string"
}
}
},
"swagger.Customer": {
"id": "swagger.Customer",
"required": [
"name",
"addresses"
],
"properties": {
"addresses": {
"type": "array",
"items": {
"$ref": "swagger.Address"
}
},
"name": {
"type": "string"
}
}
}
}`
// both slices (with pointer value and with type value) should have equal swagger representation
{
type
Customer
struct
{
Name
string
`json:"name"`
Addresses
[]
Address
`json:"addresses"`
}
testJsonFromStruct
(
t
,
Customer
{},
expected
)
}
{
type
Customer
struct
{
Name
string
`json:"name"`
Addresses
[]
*
Address
`json:"addresses"`
}
testJsonFromStruct
(
t
,
Customer
{},
expected
)
}
}
Godeps/_workspace/src/github.com/emicklei/go-restful/swagger/resource_sorter.go
0 → 100644
View file @
e11f62cf
package
swagger
// Copyright 2014 Ernest Micklei. All rights reserved.
// Use of this source code is governed by a license
// that can be found in the LICENSE file.
type
ResourceSorter
[]
Resource
func
(
s
ResourceSorter
)
Len
()
int
{
return
len
(
s
)
}
func
(
s
ResourceSorter
)
Swap
(
i
,
j
int
)
{
s
[
i
],
s
[
j
]
=
s
[
j
],
s
[
i
]
}
func
(
s
ResourceSorter
)
Less
(
i
,
j
int
)
bool
{
return
s
[
i
]
.
Path
<
s
[
j
]
.
Path
}
Godeps/_workspace/src/github.com/emicklei/go-restful/swagger/swagger.go
View file @
e11f62cf
...
@@ -13,7 +13,7 @@ type DataTypeFields struct {
...
@@ -13,7 +13,7 @@ type DataTypeFields struct {
Enum
[]
string
`json:"enum,omitempty"`
Enum
[]
string
`json:"enum,omitempty"`
Minimum
string
`json:"minimum,omitempty"`
Minimum
string
`json:"minimum,omitempty"`
Maximum
string
`json:"maximum,omitempty"`
Maximum
string
`json:"maximum,omitempty"`
Items
[]
Item
`json:"items,omitempty"`
Items
*
Item
`json:"items,omitempty"`
UniqueItems
*
bool
`json:"uniqueItems,omitempty"`
UniqueItems
*
bool
`json:"uniqueItems,omitempty"`
}
}
...
...
Godeps/_workspace/src/github.com/emicklei/go-restful/swagger/swagger_test.go
View file @
e11f62cf
...
@@ -103,10 +103,10 @@ func TestIssue78(t *testing.T) {
...
@@ -103,10 +103,10 @@ func TestIssue78(t *testing.T) {
t
.
Fatal
(
"wrong items type:"
+
*
items
.
Type
)
t
.
Fatal
(
"wrong items type:"
+
*
items
.
Type
)
}
}
items_items
:=
items
.
Items
items_items
:=
items
.
Items
if
len
(
items_items
)
==
0
{
if
items_items
==
nil
{
t
.
Fatal
(
"missing items->items"
)
t
.
Fatal
(
"missing items->items"
)
}
}
ref
:=
items_items
[
0
]
.
Ref
ref
:=
items_items
.
Ref
if
ref
==
nil
{
if
ref
==
nil
{
t
.
Fatal
(
"missing $ref"
)
t
.
Fatal
(
"missing $ref"
)
}
}
...
...
Godeps/_workspace/src/github.com/emicklei/go-restful/swagger/swagger_webservice.go
View file @
e11f62cf
...
@@ -2,6 +2,7 @@ package swagger
...
@@ -2,6 +2,7 @@ package swagger
import
(
import
(
"fmt"
"fmt"
"github.com/emicklei/go-restful"
"github.com/emicklei/go-restful"
// "github.com/emicklei/hopwatch"
// "github.com/emicklei/hopwatch"
"log"
"log"
...
@@ -128,7 +129,7 @@ func enableCORS(req *restful.Request, resp *restful.Response, chain *restful.Fil
...
@@ -128,7 +129,7 @@ func enableCORS(req *restful.Request, resp *restful.Response, chain *restful.Fil
}
}
func
(
sws
SwaggerService
)
getListing
(
req
*
restful
.
Request
,
resp
*
restful
.
Response
)
{
func
(
sws
SwaggerService
)
getListing
(
req
*
restful
.
Request
,
resp
*
restful
.
Response
)
{
listing
:=
ResourceListing
{
SwaggerVersion
:
swaggerVersion
}
listing
:=
ResourceListing
{
SwaggerVersion
:
swaggerVersion
,
ApiVersion
:
sws
.
config
.
ApiVersion
}
for
k
,
v
:=
range
sws
.
apiDeclarationMap
{
for
k
,
v
:=
range
sws
.
apiDeclarationMap
{
ref
:=
Resource
{
Path
:
k
}
ref
:=
Resource
{
Path
:
k
}
if
len
(
v
.
Apis
)
>
0
{
// use description of first (could still be empty)
if
len
(
v
.
Apis
)
>
0
{
// use description of first (could still be empty)
...
@@ -136,6 +137,7 @@ func (sws SwaggerService) getListing(req *restful.Request, resp *restful.Respons
...
@@ -136,6 +137,7 @@ func (sws SwaggerService) getListing(req *restful.Request, resp *restful.Respons
}
}
listing
.
Apis
=
append
(
listing
.
Apis
,
ref
)
listing
.
Apis
=
append
(
listing
.
Apis
,
ref
)
}
}
sort
.
Sort
(
ResourceSorter
(
listing
.
Apis
))
resp
.
WriteAsJson
(
listing
)
resp
.
WriteAsJson
(
listing
)
}
}
...
@@ -145,7 +147,21 @@ func (sws SwaggerService) getDeclarations(req *restful.Request, resp *restful.Re
...
@@ -145,7 +147,21 @@ func (sws SwaggerService) getDeclarations(req *restful.Request, resp *restful.Re
if
len
(
sws
.
config
.
WebServicesUrl
)
==
0
{
if
len
(
sws
.
config
.
WebServicesUrl
)
==
0
{
// update base path from the actual request
// update base path from the actual request
// TODO how to detect https? assume http for now
// TODO how to detect https? assume http for now
(
&
decl
)
.
BasePath
=
fmt
.
Sprintf
(
"http://%s"
,
req
.
Request
.
Host
)
var
host
string
// X-Forwarded-Host or Host or Request.Host
hostvalues
,
ok
:=
req
.
Request
.
Header
[
"X-Forwarded-Host"
]
// apache specific?
if
!
ok
||
len
(
hostvalues
)
==
0
{
forwarded
,
ok
:=
req
.
Request
.
Header
[
"Host"
]
// without reverse-proxy
if
!
ok
||
len
(
forwarded
)
==
0
{
// fallback to Host field
host
=
req
.
Request
.
Host
}
else
{
host
=
forwarded
[
0
]
}
}
else
{
host
=
hostvalues
[
0
]
}
(
&
decl
)
.
BasePath
=
fmt
.
Sprintf
(
"http://%s"
,
host
)
}
}
resp
.
WriteAsJson
(
decl
)
resp
.
WriteAsJson
(
decl
)
}
}
...
@@ -177,6 +193,7 @@ func (sws SwaggerService) composeDeclaration(ws *restful.WebService, pathPrefix
...
@@ -177,6 +193,7 @@ func (sws SwaggerService) composeDeclaration(ws *restful.WebService, pathPrefix
operation
:=
Operation
{
operation
:=
Operation
{
Method
:
route
.
Method
,
Method
:
route
.
Method
,
Summary
:
route
.
Doc
,
Summary
:
route
.
Doc
,
Notes
:
route
.
Notes
,
Type
:
asDataType
(
route
.
WriteSample
),
Type
:
asDataType
(
route
.
WriteSample
),
Parameters
:
[]
Parameter
{},
Parameters
:
[]
Parameter
{},
Nickname
:
route
.
Operation
,
Nickname
:
route
.
Operation
,
...
...
Godeps/_workspace/src/github.com/emicklei/go-restful/swagger/utils_test.go
View file @
e11f62cf
...
@@ -33,15 +33,18 @@ func compareJson(t *testing.T, flatCompare bool, value interface{}, expectedJson
...
@@ -33,15 +33,18 @@ func compareJson(t *testing.T, flatCompare bool, value interface{}, expectedJson
return
return
}
}
actual
:=
string
(
output
)
actual
:=
string
(
output
)
if
actual
!=
expectedJsonAsString
{
var
actualMap
map
[
string
]
interface
{}
t
.
Errorf
(
"First mismatch JSON doc at line:%d"
,
indexOfNonMatchingLine
(
actual
,
expectedJsonAsString
))
var
expectedMap
map
[
string
]
interface
{}
// Use simple fmt to create a pastable output :-)
json
.
Unmarshal
(
output
,
&
actualMap
)
json
.
Unmarshal
([]
byte
(
expectedJsonAsString
),
&
expectedMap
)
if
!
reflect
.
DeepEqual
(
actualMap
,
expectedMap
)
{
fmt
.
Println
(
"---- expected -----"
)
fmt
.
Println
(
"---- expected -----"
)
fmt
.
Println
(
withLineNumbers
(
expectedJsonAsString
))
fmt
.
Println
(
withLineNumbers
(
expectedJsonAsString
))
fmt
.
Println
(
"---- actual -----"
)
fmt
.
Println
(
"---- actual -----"
)
fmt
.
Println
(
withLineNumbers
(
actual
))
fmt
.
Println
(
withLineNumbers
(
actual
))
fmt
.
Println
(
"---- raw -----"
)
fmt
.
Println
(
"---- raw -----"
)
fmt
.
Println
(
actual
)
fmt
.
Println
(
actual
)
t
.
Error
(
"there are differences"
)
}
}
}
}
...
...
Godeps/_workspace/src/github.com/emicklei/go-restful/web_service.go
View file @
e11f62cf
...
@@ -60,6 +60,12 @@ func (w *WebService) Param(parameter *Parameter) *WebService {
...
@@ -60,6 +60,12 @@ func (w *WebService) Param(parameter *Parameter) *WebService {
// PathParameter creates a new Parameter of kind Path for documentation purposes.
// PathParameter creates a new Parameter of kind Path for documentation purposes.
// It is initialized as required with string as its DataType.
// It is initialized as required with string as its DataType.
func
(
w
*
WebService
)
PathParameter
(
name
,
description
string
)
*
Parameter
{
func
(
w
*
WebService
)
PathParameter
(
name
,
description
string
)
*
Parameter
{
return
PathParameter
(
name
,
description
)
}
// PathParameter creates a new Parameter of kind Path for documentation purposes.
// It is initialized as required with string as its DataType.
func
PathParameter
(
name
,
description
string
)
*
Parameter
{
p
:=
&
Parameter
{
&
ParameterData
{
Name
:
name
,
Description
:
description
,
Required
:
true
,
DataType
:
"string"
}}
p
:=
&
Parameter
{
&
ParameterData
{
Name
:
name
,
Description
:
description
,
Required
:
true
,
DataType
:
"string"
}}
p
.
bePath
()
p
.
bePath
()
return
p
return
p
...
@@ -68,6 +74,12 @@ func (w *WebService) PathParameter(name, description string) *Parameter {
...
@@ -68,6 +74,12 @@ func (w *WebService) PathParameter(name, description string) *Parameter {
// QueryParameter creates a new Parameter of kind Query for documentation purposes.
// QueryParameter creates a new Parameter of kind Query for documentation purposes.
// It is initialized as not required with string as its DataType.
// It is initialized as not required with string as its DataType.
func
(
w
*
WebService
)
QueryParameter
(
name
,
description
string
)
*
Parameter
{
func
(
w
*
WebService
)
QueryParameter
(
name
,
description
string
)
*
Parameter
{
return
QueryParameter
(
name
,
description
)
}
// QueryParameter creates a new Parameter of kind Query for documentation purposes.
// It is initialized as not required with string as its DataType.
func
QueryParameter
(
name
,
description
string
)
*
Parameter
{
p
:=
&
Parameter
{
&
ParameterData
{
Name
:
name
,
Description
:
description
,
Required
:
false
,
DataType
:
"string"
}}
p
:=
&
Parameter
{
&
ParameterData
{
Name
:
name
,
Description
:
description
,
Required
:
false
,
DataType
:
"string"
}}
p
.
beQuery
()
p
.
beQuery
()
return
p
return
p
...
@@ -76,6 +88,12 @@ func (w *WebService) QueryParameter(name, description string) *Parameter {
...
@@ -76,6 +88,12 @@ func (w *WebService) QueryParameter(name, description string) *Parameter {
// BodyParameter creates a new Parameter of kind Body for documentation purposes.
// BodyParameter creates a new Parameter of kind Body for documentation purposes.
// It is initialized as required without a DataType.
// It is initialized as required without a DataType.
func
(
w
*
WebService
)
BodyParameter
(
name
,
description
string
)
*
Parameter
{
func
(
w
*
WebService
)
BodyParameter
(
name
,
description
string
)
*
Parameter
{
return
BodyParameter
(
name
,
description
)
}
// BodyParameter creates a new Parameter of kind Body for documentation purposes.
// It is initialized as required without a DataType.
func
BodyParameter
(
name
,
description
string
)
*
Parameter
{
p
:=
&
Parameter
{
&
ParameterData
{
Name
:
name
,
Description
:
description
,
Required
:
true
}}
p
:=
&
Parameter
{
&
ParameterData
{
Name
:
name
,
Description
:
description
,
Required
:
true
}}
p
.
beBody
()
p
.
beBody
()
return
p
return
p
...
@@ -84,6 +102,12 @@ func (w *WebService) BodyParameter(name, description string) *Parameter {
...
@@ -84,6 +102,12 @@ func (w *WebService) BodyParameter(name, description string) *Parameter {
// HeaderParameter creates a new Parameter of kind (Http) Header for documentation purposes.
// HeaderParameter creates a new Parameter of kind (Http) Header for documentation purposes.
// It is initialized as not required with string as its DataType.
// It is initialized as not required with string as its DataType.
func
(
w
*
WebService
)
HeaderParameter
(
name
,
description
string
)
*
Parameter
{
func
(
w
*
WebService
)
HeaderParameter
(
name
,
description
string
)
*
Parameter
{
return
HeaderParameter
(
name
,
description
)
}
// HeaderParameter creates a new Parameter of kind (Http) Header for documentation purposes.
// It is initialized as not required with string as its DataType.
func
HeaderParameter
(
name
,
description
string
)
*
Parameter
{
p
:=
&
Parameter
{
&
ParameterData
{
Name
:
name
,
Description
:
description
,
Required
:
false
,
DataType
:
"string"
}}
p
:=
&
Parameter
{
&
ParameterData
{
Name
:
name
,
Description
:
description
,
Required
:
false
,
DataType
:
"string"
}}
p
.
beHeader
()
p
.
beHeader
()
return
p
return
p
...
@@ -92,6 +116,12 @@ func (w *WebService) HeaderParameter(name, description string) *Parameter {
...
@@ -92,6 +116,12 @@ func (w *WebService) HeaderParameter(name, description string) *Parameter {
// FormParameter creates a new Parameter of kind Form (using application/x-www-form-urlencoded) for documentation purposes.
// FormParameter creates a new Parameter of kind Form (using application/x-www-form-urlencoded) for documentation purposes.
// It is initialized as required with string as its DataType.
// It is initialized as required with string as its DataType.
func
(
w
*
WebService
)
FormParameter
(
name
,
description
string
)
*
Parameter
{
func
(
w
*
WebService
)
FormParameter
(
name
,
description
string
)
*
Parameter
{
return
FormParameter
(
name
,
description
)
}
// FormParameter creates a new Parameter of kind Form (using application/x-www-form-urlencoded) for documentation purposes.
// It is initialized as required with string as its DataType.
func
FormParameter
(
name
,
description
string
)
*
Parameter
{
p
:=
&
Parameter
{
&
ParameterData
{
Name
:
name
,
Description
:
description
,
Required
:
false
,
DataType
:
"string"
}}
p
:=
&
Parameter
{
&
ParameterData
{
Name
:
name
,
Description
:
description
,
Required
:
false
,
DataType
:
"string"
}}
p
.
beForm
()
p
.
beForm
()
return
p
return
p
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment