vendor: revendor
This commit is contained in:
		
							
								
								
									
										26
									
								
								vendor/github.com/go-openapi/spec/.editorconfig
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								vendor/github.com/go-openapi/spec/.editorconfig
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| # top-most EditorConfig file | ||||
| root = true | ||||
|  | ||||
| # Unix-style newlines with a newline ending every file | ||||
| [*] | ||||
| end_of_line = lf | ||||
| insert_final_newline = true | ||||
| indent_style = space | ||||
| indent_size = 2 | ||||
| trim_trailing_whitespace = true | ||||
|  | ||||
| # Set default charset | ||||
| [*.{js,py,go,scala,rb,java,html,css,less,sass,md}] | ||||
| charset = utf-8 | ||||
|  | ||||
| # Tab indentation (no size specified) | ||||
| [*.go] | ||||
| indent_style = tab | ||||
|  | ||||
| [*.md] | ||||
| trim_trailing_whitespace = false | ||||
|  | ||||
| # Matches the exact files either package.json or .travis.yml | ||||
| [{package.json,.travis.yml}] | ||||
| indent_style = space | ||||
| indent_size = 2 | ||||
							
								
								
									
										2
									
								
								vendor/github.com/go-openapi/spec/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/go-openapi/spec/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| secrets.yml | ||||
| coverage.out | ||||
							
								
								
									
										23
									
								
								vendor/github.com/go-openapi/spec/.golangci.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								vendor/github.com/go-openapi/spec/.golangci.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| linters-settings: | ||||
|   govet: | ||||
|     check-shadowing: true | ||||
|   golint: | ||||
|     min-confidence: 0 | ||||
|   gocyclo: | ||||
|     min-complexity: 45 | ||||
|   maligned: | ||||
|     suggest-new: true | ||||
|   dupl: | ||||
|     threshold: 100 | ||||
|   goconst: | ||||
|     min-len: 2 | ||||
|     min-occurrences: 2 | ||||
|  | ||||
| linters: | ||||
|   enable-all: true | ||||
|   disable: | ||||
|     - maligned | ||||
|     - unparam | ||||
|     - lll | ||||
|     - gochecknoinits | ||||
|     - gochecknoglobals | ||||
							
								
								
									
										18
									
								
								vendor/github.com/go-openapi/spec/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								vendor/github.com/go-openapi/spec/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| after_success: | ||||
| - bash <(curl -s https://codecov.io/bash) | ||||
| go: | ||||
| - '1.9' | ||||
| - 1.10.x | ||||
| - 1.11.x | ||||
| install: | ||||
| - go get -u github.com/stretchr/testify | ||||
| - go get -u github.com/go-openapi/swag | ||||
| - go get -u gopkg.in/yaml.v2 | ||||
| - go get -u github.com/go-openapi/jsonpointer | ||||
| - go get -u github.com/go-openapi/jsonreference | ||||
| language: go | ||||
| notifications: | ||||
|   slack: | ||||
|     secure: QUWvCkBBK09GF7YtEvHHVt70JOkdlNBG0nIKu/5qc4/nW5HP8I2w0SEf/XR2je0eED1Qe3L/AfMCWwrEj+IUZc3l4v+ju8X8R3Lomhme0Eb0jd1MTMCuPcBT47YCj0M7RON7vXtbFfm1hFJ/jLe5+9FXz0hpXsR24PJc5ZIi/ogNwkaPqG4BmndzecpSh0vc2FJPZUD9LT0I09REY/vXR0oQAalLkW0asGD5taHZTUZq/kBpsNxaAFrLM23i4mUcf33M5fjLpvx5LRICrX/57XpBrDh2TooBU6Qj3CgoY0uPRYUmSNxbVx1czNzl2JtEpb5yjoxfVPQeg0BvQM00G8LJINISR+ohrjhkZmAqchDupAX+yFrxTtORa78CtnIL6z/aTNlgwwVD8kvL/1pFA/JWYmKDmz93mV/+6wubGzNSQCstzjkFA4/iZEKewKUoRIAi/fxyscP6L/rCpmY/4llZZvrnyTqVbt6URWpopUpH4rwYqreXAtJxJsfBJIeSmUIiDIOMGkCTvyTEW3fWGmGoqWtSHLoaWDyAIGb7azb+KvfpWtEcoPFWfSWU+LGee0A/YsUhBl7ADB9A0CJEuR8q4BPpKpfLwPKSiKSAXL7zDkyjExyhtgqbSl2jS+rKIHOZNL8JkCcTP2MKMVd563C5rC5FMKqu3S9m2b6380E= | ||||
| script: | ||||
| - go test -v -race -cover -coverprofile=coverage.txt -covermode=atomic ./... | ||||
							
								
								
									
										74
									
								
								vendor/github.com/go-openapi/spec/CODE_OF_CONDUCT.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								vendor/github.com/go-openapi/spec/CODE_OF_CONDUCT.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,74 @@ | ||||
| # Contributor Covenant Code of Conduct | ||||
|  | ||||
| ## Our Pledge | ||||
|  | ||||
| In the interest of fostering an open and welcoming environment, we as | ||||
| contributors and maintainers pledge to making participation in our project and | ||||
| our community a harassment-free experience for everyone, regardless of age, body | ||||
| size, disability, ethnicity, gender identity and expression, level of experience, | ||||
| nationality, personal appearance, race, religion, or sexual identity and | ||||
| orientation. | ||||
|  | ||||
| ## Our Standards | ||||
|  | ||||
| Examples of behavior that contributes to creating a positive environment | ||||
| include: | ||||
|  | ||||
| * Using welcoming and inclusive language | ||||
| * Being respectful of differing viewpoints and experiences | ||||
| * Gracefully accepting constructive criticism | ||||
| * Focusing on what is best for the community | ||||
| * Showing empathy towards other community members | ||||
|  | ||||
| Examples of unacceptable behavior by participants include: | ||||
|  | ||||
| * The use of sexualized language or imagery and unwelcome sexual attention or | ||||
| advances | ||||
| * Trolling, insulting/derogatory comments, and personal or political attacks | ||||
| * Public or private harassment | ||||
| * Publishing others' private information, such as a physical or electronic | ||||
|   address, without explicit permission | ||||
| * Other conduct which could reasonably be considered inappropriate in a | ||||
|   professional setting | ||||
|  | ||||
| ## Our Responsibilities | ||||
|  | ||||
| Project maintainers are responsible for clarifying the standards of acceptable | ||||
| behavior and are expected to take appropriate and fair corrective action in | ||||
| response to any instances of unacceptable behavior. | ||||
|  | ||||
| Project maintainers have the right and responsibility to remove, edit, or | ||||
| reject comments, commits, code, wiki edits, issues, and other contributions | ||||
| that are not aligned to this Code of Conduct, or to ban temporarily or | ||||
| permanently any contributor for other behaviors that they deem inappropriate, | ||||
| threatening, offensive, or harmful. | ||||
|  | ||||
| ## Scope | ||||
|  | ||||
| This Code of Conduct applies both within project spaces and in public spaces | ||||
| when an individual is representing the project or its community. Examples of | ||||
| representing a project or community include using an official project e-mail | ||||
| address, posting via an official social media account, or acting as an appointed | ||||
| representative at an online or offline event. Representation of a project may be | ||||
| further defined and clarified by project maintainers. | ||||
|  | ||||
| ## Enforcement | ||||
|  | ||||
| Instances of abusive, harassing, or otherwise unacceptable behavior may be | ||||
| reported by contacting the project team at ivan+abuse@flanders.co.nz. All | ||||
| complaints will be reviewed and investigated and will result in a response that | ||||
| is deemed necessary and appropriate to the circumstances. The project team is | ||||
| obligated to maintain confidentiality with regard to the reporter of an incident. | ||||
| Further details of specific enforcement policies may be posted separately. | ||||
|  | ||||
| Project maintainers who do not follow or enforce the Code of Conduct in good | ||||
| faith may face temporary or permanent repercussions as determined by other | ||||
| members of the project's leadership. | ||||
|  | ||||
| ## Attribution | ||||
|  | ||||
| This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, | ||||
| available at [http://contributor-covenant.org/version/1/4][version] | ||||
|  | ||||
| [homepage]: http://contributor-covenant.org | ||||
| [version]: http://contributor-covenant.org/version/1/4/ | ||||
							
								
								
									
										202
									
								
								vendor/github.com/go-openapi/spec/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										202
									
								
								vendor/github.com/go-openapi/spec/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,202 @@ | ||||
|  | ||||
|                                  Apache License | ||||
|                            Version 2.0, January 2004 | ||||
|                         http://www.apache.org/licenses/ | ||||
|  | ||||
|    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION | ||||
|  | ||||
|    1. Definitions. | ||||
|  | ||||
|       "License" shall mean the terms and conditions for use, reproduction, | ||||
|       and distribution as defined by Sections 1 through 9 of this document. | ||||
|  | ||||
|       "Licensor" shall mean the copyright owner or entity authorized by | ||||
|       the copyright owner that is granting the License. | ||||
|  | ||||
|       "Legal Entity" shall mean the union of the acting entity and all | ||||
|       other entities that control, are controlled by, or are under common | ||||
|       control with that entity. For the purposes of this definition, | ||||
|       "control" means (i) the power, direct or indirect, to cause the | ||||
|       direction or management of such entity, whether by contract or | ||||
|       otherwise, or (ii) ownership of fifty percent (50%) or more of the | ||||
|       outstanding shares, or (iii) beneficial ownership of such entity. | ||||
|  | ||||
|       "You" (or "Your") shall mean an individual or Legal Entity | ||||
|       exercising permissions granted by this License. | ||||
|  | ||||
|       "Source" form shall mean the preferred form for making modifications, | ||||
|       including but not limited to software source code, documentation | ||||
|       source, and configuration files. | ||||
|  | ||||
|       "Object" form shall mean any form resulting from mechanical | ||||
|       transformation or translation of a Source form, including but | ||||
|       not limited to compiled object code, generated documentation, | ||||
|       and conversions to other media types. | ||||
|  | ||||
|       "Work" shall mean the work of authorship, whether in Source or | ||||
|       Object form, made available under the License, as indicated by a | ||||
|       copyright notice that is included in or attached to the work | ||||
|       (an example is provided in the Appendix below). | ||||
|  | ||||
|       "Derivative Works" shall mean any work, whether in Source or Object | ||||
|       form, that is based on (or derived from) the Work and for which the | ||||
|       editorial revisions, annotations, elaborations, or other modifications | ||||
|       represent, as a whole, an original work of authorship. For the purposes | ||||
|       of this License, Derivative Works shall not include works that remain | ||||
|       separable from, or merely link (or bind by name) to the interfaces of, | ||||
|       the Work and Derivative Works thereof. | ||||
|  | ||||
|       "Contribution" shall mean any work of authorship, including | ||||
|       the original version of the Work and any modifications or additions | ||||
|       to that Work or Derivative Works thereof, that is intentionally | ||||
|       submitted to Licensor for inclusion in the Work by the copyright owner | ||||
|       or by an individual or Legal Entity authorized to submit on behalf of | ||||
|       the copyright owner. For the purposes of this definition, "submitted" | ||||
|       means any form of electronic, verbal, or written communication sent | ||||
|       to the Licensor or its representatives, including but not limited to | ||||
|       communication on electronic mailing lists, source code control systems, | ||||
|       and issue tracking systems that are managed by, or on behalf of, the | ||||
|       Licensor for the purpose of discussing and improving the Work, but | ||||
|       excluding communication that is conspicuously marked or otherwise | ||||
|       designated in writing by the copyright owner as "Not a Contribution." | ||||
|  | ||||
|       "Contributor" shall mean Licensor and any individual or Legal Entity | ||||
|       on behalf of whom a Contribution has been received by Licensor and | ||||
|       subsequently incorporated within the Work. | ||||
|  | ||||
|    2. Grant of Copyright License. Subject to the terms and conditions of | ||||
|       this License, each Contributor hereby grants to You a perpetual, | ||||
|       worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||||
|       copyright license to reproduce, prepare Derivative Works of, | ||||
|       publicly display, publicly perform, sublicense, and distribute the | ||||
|       Work and such Derivative Works in Source or Object form. | ||||
|  | ||||
|    3. Grant of Patent License. Subject to the terms and conditions of | ||||
|       this License, each Contributor hereby grants to You a perpetual, | ||||
|       worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||||
|       (except as stated in this section) patent license to make, have made, | ||||
|       use, offer to sell, sell, import, and otherwise transfer the Work, | ||||
|       where such license applies only to those patent claims licensable | ||||
|       by such Contributor that are necessarily infringed by their | ||||
|       Contribution(s) alone or by combination of their Contribution(s) | ||||
|       with the Work to which such Contribution(s) was submitted. If You | ||||
|       institute patent litigation against any entity (including a | ||||
|       cross-claim or counterclaim in a lawsuit) alleging that the Work | ||||
|       or a Contribution incorporated within the Work constitutes direct | ||||
|       or contributory patent infringement, then any patent licenses | ||||
|       granted to You under this License for that Work shall terminate | ||||
|       as of the date such litigation is filed. | ||||
|  | ||||
|    4. Redistribution. You may reproduce and distribute copies of the | ||||
|       Work or Derivative Works thereof in any medium, with or without | ||||
|       modifications, and in Source or Object form, provided that You | ||||
|       meet the following conditions: | ||||
|  | ||||
|       (a) You must give any other recipients of the Work or | ||||
|           Derivative Works a copy of this License; and | ||||
|  | ||||
|       (b) You must cause any modified files to carry prominent notices | ||||
|           stating that You changed the files; and | ||||
|  | ||||
|       (c) You must retain, in the Source form of any Derivative Works | ||||
|           that You distribute, all copyright, patent, trademark, and | ||||
|           attribution notices from the Source form of the Work, | ||||
|           excluding those notices that do not pertain to any part of | ||||
|           the Derivative Works; and | ||||
|  | ||||
|       (d) If the Work includes a "NOTICE" text file as part of its | ||||
|           distribution, then any Derivative Works that You distribute must | ||||
|           include a readable copy of the attribution notices contained | ||||
|           within such NOTICE file, excluding those notices that do not | ||||
|           pertain to any part of the Derivative Works, in at least one | ||||
|           of the following places: within a NOTICE text file distributed | ||||
|           as part of the Derivative Works; within the Source form or | ||||
|           documentation, if provided along with the Derivative Works; or, | ||||
|           within a display generated by the Derivative Works, if and | ||||
|           wherever such third-party notices normally appear. The contents | ||||
|           of the NOTICE file are for informational purposes only and | ||||
|           do not modify the License. You may add Your own attribution | ||||
|           notices within Derivative Works that You distribute, alongside | ||||
|           or as an addendum to the NOTICE text from the Work, provided | ||||
|           that such additional attribution notices cannot be construed | ||||
|           as modifying the License. | ||||
|  | ||||
|       You may add Your own copyright statement to Your modifications and | ||||
|       may provide additional or different license terms and conditions | ||||
|       for use, reproduction, or distribution of Your modifications, or | ||||
|       for any such Derivative Works as a whole, provided Your use, | ||||
|       reproduction, and distribution of the Work otherwise complies with | ||||
|       the conditions stated in this License. | ||||
|  | ||||
|    5. Submission of Contributions. Unless You explicitly state otherwise, | ||||
|       any Contribution intentionally submitted for inclusion in the Work | ||||
|       by You to the Licensor shall be under the terms and conditions of | ||||
|       this License, without any additional terms or conditions. | ||||
|       Notwithstanding the above, nothing herein shall supersede or modify | ||||
|       the terms of any separate license agreement you may have executed | ||||
|       with Licensor regarding such Contributions. | ||||
|  | ||||
|    6. Trademarks. This License does not grant permission to use the trade | ||||
|       names, trademarks, service marks, or product names of the Licensor, | ||||
|       except as required for reasonable and customary use in describing the | ||||
|       origin of the Work and reproducing the content of the NOTICE file. | ||||
|  | ||||
|    7. Disclaimer of Warranty. Unless required by applicable law or | ||||
|       agreed to in writing, Licensor provides the Work (and each | ||||
|       Contributor provides its Contributions) on an "AS IS" BASIS, | ||||
|       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or | ||||
|       implied, including, without limitation, any warranties or conditions | ||||
|       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A | ||||
|       PARTICULAR PURPOSE. You are solely responsible for determining the | ||||
|       appropriateness of using or redistributing the Work and assume any | ||||
|       risks associated with Your exercise of permissions under this License. | ||||
|  | ||||
|    8. Limitation of Liability. In no event and under no legal theory, | ||||
|       whether in tort (including negligence), contract, or otherwise, | ||||
|       unless required by applicable law (such as deliberate and grossly | ||||
|       negligent acts) or agreed to in writing, shall any Contributor be | ||||
|       liable to You for damages, including any direct, indirect, special, | ||||
|       incidental, or consequential damages of any character arising as a | ||||
|       result of this License or out of the use or inability to use the | ||||
|       Work (including but not limited to damages for loss of goodwill, | ||||
|       work stoppage, computer failure or malfunction, or any and all | ||||
|       other commercial damages or losses), even if such Contributor | ||||
|       has been advised of the possibility of such damages. | ||||
|  | ||||
|    9. Accepting Warranty or Additional Liability. While redistributing | ||||
|       the Work or Derivative Works thereof, You may choose to offer, | ||||
|       and charge a fee for, acceptance of support, warranty, indemnity, | ||||
|       or other liability obligations and/or rights consistent with this | ||||
|       License. However, in accepting such obligations, You may act only | ||||
|       on Your own behalf and on Your sole responsibility, not on behalf | ||||
|       of any other Contributor, and only if You agree to indemnify, | ||||
|       defend, and hold each Contributor harmless for any liability | ||||
|       incurred by, or claims asserted against, such Contributor by reason | ||||
|       of your accepting any such warranty or additional liability. | ||||
|  | ||||
|    END OF TERMS AND CONDITIONS | ||||
|  | ||||
|    APPENDIX: How to apply the Apache License to your work. | ||||
|  | ||||
|       To apply the Apache License to your work, attach the following | ||||
|       boilerplate notice, with the fields enclosed by brackets "[]" | ||||
|       replaced with your own identifying information. (Don't include | ||||
|       the brackets!)  The text should be enclosed in the appropriate | ||||
|       comment syntax for the file format. We also recommend that a | ||||
|       file or class name and description of purpose be included on the | ||||
|       same "printed page" as the copyright notice for easier | ||||
|       identification within third-party archives. | ||||
|  | ||||
|    Copyright [yyyy] [name of copyright owner] | ||||
|  | ||||
|    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. | ||||
							
								
								
									
										10
									
								
								vendor/github.com/go-openapi/spec/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								vendor/github.com/go-openapi/spec/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| # OAI object model [](https://travis-ci.org/go-openapi/spec) [](https://codecov.io/gh/go-openapi/spec) [](https://slackin.goswagger.io) | ||||
|  | ||||
| [](https://raw.githubusercontent.com/go-openapi/spec/master/LICENSE) | ||||
| [](http://godoc.org/github.com/go-openapi/spec) | ||||
| [](https://golangci.com) | ||||
| [](https://goreportcard.com/report/github.com/go-openapi/spec) | ||||
|  | ||||
| The object model for OpenAPI specification documents. | ||||
|  | ||||
| Currently supports Swagger 2.0. | ||||
							
								
								
									
										297
									
								
								vendor/github.com/go-openapi/spec/bindata.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										297
									
								
								vendor/github.com/go-openapi/spec/bindata.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										60
									
								
								vendor/github.com/go-openapi/spec/cache.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								vendor/github.com/go-openapi/spec/cache.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,60 @@ | ||||
| // Copyright 2015 go-swagger maintainers | ||||
| // | ||||
| // 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 spec | ||||
|  | ||||
| import "sync" | ||||
|  | ||||
| // ResolutionCache a cache for resolving urls | ||||
| type ResolutionCache interface { | ||||
| 	Get(string) (interface{}, bool) | ||||
| 	Set(string, interface{}) | ||||
| } | ||||
|  | ||||
| type simpleCache struct { | ||||
| 	lock  sync.RWMutex | ||||
| 	store map[string]interface{} | ||||
| } | ||||
|  | ||||
| // Get retrieves a cached URI | ||||
| func (s *simpleCache) Get(uri string) (interface{}, bool) { | ||||
| 	debugLog("getting %q from resolution cache", uri) | ||||
| 	s.lock.RLock() | ||||
| 	v, ok := s.store[uri] | ||||
| 	debugLog("got %q from resolution cache: %t", uri, ok) | ||||
|  | ||||
| 	s.lock.RUnlock() | ||||
| 	return v, ok | ||||
| } | ||||
|  | ||||
| // Set caches a URI | ||||
| func (s *simpleCache) Set(uri string, data interface{}) { | ||||
| 	s.lock.Lock() | ||||
| 	s.store[uri] = data | ||||
| 	s.lock.Unlock() | ||||
| } | ||||
|  | ||||
| var resCache ResolutionCache | ||||
|  | ||||
| func init() { | ||||
| 	resCache = initResolutionCache() | ||||
| } | ||||
|  | ||||
| // initResolutionCache initializes the URI resolution cache | ||||
| func initResolutionCache() ResolutionCache { | ||||
| 	return &simpleCache{store: map[string]interface{}{ | ||||
| 		"http://swagger.io/v2/schema.json":       MustLoadSwagger20Schema(), | ||||
| 		"http://json-schema.org/draft-04/schema": MustLoadJSONSchemaDraft04(), | ||||
| 	}} | ||||
| } | ||||
							
								
								
									
										24
									
								
								vendor/github.com/go-openapi/spec/contact_info.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								vendor/github.com/go-openapi/spec/contact_info.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| // Copyright 2015 go-swagger maintainers | ||||
| // | ||||
| // 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 spec | ||||
|  | ||||
| // ContactInfo contact information for the exposed API. | ||||
| // | ||||
| // For more information: http://goo.gl/8us55a#contactObject | ||||
| type ContactInfo struct { | ||||
| 	Name  string `json:"name,omitempty"` | ||||
| 	URL   string `json:"url,omitempty"` | ||||
| 	Email string `json:"email,omitempty"` | ||||
| } | ||||
							
								
								
									
										47
									
								
								vendor/github.com/go-openapi/spec/debug.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								vendor/github.com/go-openapi/spec/debug.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,47 @@ | ||||
| // Copyright 2015 go-swagger maintainers | ||||
| // | ||||
| // 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 spec | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"log" | ||||
| 	"os" | ||||
| 	"path/filepath" | ||||
| 	"runtime" | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	// Debug is true when the SWAGGER_DEBUG env var is not empty. | ||||
| 	// It enables a more verbose logging of this package. | ||||
| 	Debug = os.Getenv("SWAGGER_DEBUG") != "" | ||||
| 	// specLogger is a debug logger for this package | ||||
| 	specLogger *log.Logger | ||||
| ) | ||||
|  | ||||
| func init() { | ||||
| 	debugOptions() | ||||
| } | ||||
|  | ||||
| func debugOptions() { | ||||
| 	specLogger = log.New(os.Stdout, "spec:", log.LstdFlags) | ||||
| } | ||||
|  | ||||
| func debugLog(msg string, args ...interface{}) { | ||||
| 	// A private, trivial trace logger, based on go-openapi/spec/expander.go:debugLog() | ||||
| 	if Debug { | ||||
| 		_, file1, pos1, _ := runtime.Caller(1) | ||||
| 		specLogger.Printf("%s:%d: %s", filepath.Base(file1), pos1, fmt.Sprintf(msg, args...)) | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										650
									
								
								vendor/github.com/go-openapi/spec/expander.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										650
									
								
								vendor/github.com/go-openapi/spec/expander.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,650 @@ | ||||
| // Copyright 2015 go-swagger maintainers | ||||
| // | ||||
| // 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 spec | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| // ExpandOptions provides options for spec expand | ||||
| type ExpandOptions struct { | ||||
| 	RelativeBase        string | ||||
| 	SkipSchemas         bool | ||||
| 	ContinueOnError     bool | ||||
| 	AbsoluteCircularRef bool | ||||
| } | ||||
|  | ||||
| // ResolveRefWithBase resolves a reference against a context root with preservation of base path | ||||
| func ResolveRefWithBase(root interface{}, ref *Ref, opts *ExpandOptions) (*Schema, error) { | ||||
| 	resolver, err := defaultSchemaLoader(root, opts, nil, nil) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	specBasePath := "" | ||||
| 	if opts != nil && opts.RelativeBase != "" { | ||||
| 		specBasePath, _ = absPath(opts.RelativeBase) | ||||
| 	} | ||||
|  | ||||
| 	result := new(Schema) | ||||
| 	if err := resolver.Resolve(ref, result, specBasePath); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return result, nil | ||||
| } | ||||
|  | ||||
| // ResolveRef resolves a reference against a context root | ||||
| // ref is guaranteed to be in root (no need to go to external files) | ||||
| // ResolveRef is ONLY called from the code generation module | ||||
| func ResolveRef(root interface{}, ref *Ref) (*Schema, error) { | ||||
| 	res, _, err := ref.GetPointer().Get(root) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	switch sch := res.(type) { | ||||
| 	case Schema: | ||||
| 		return &sch, nil | ||||
| 	case *Schema: | ||||
| 		return sch, nil | ||||
| 	case map[string]interface{}: | ||||
| 		b, _ := json.Marshal(sch) | ||||
| 		newSch := new(Schema) | ||||
| 		_ = json.Unmarshal(b, newSch) | ||||
| 		return newSch, nil | ||||
| 	default: | ||||
| 		return nil, fmt.Errorf("unknown type for the resolved reference") | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // ResolveParameter resolves a parameter reference against a context root | ||||
| func ResolveParameter(root interface{}, ref Ref) (*Parameter, error) { | ||||
| 	return ResolveParameterWithBase(root, ref, nil) | ||||
| } | ||||
|  | ||||
| // ResolveParameterWithBase resolves a parameter reference against a context root and base path | ||||
| func ResolveParameterWithBase(root interface{}, ref Ref, opts *ExpandOptions) (*Parameter, error) { | ||||
| 	resolver, err := defaultSchemaLoader(root, opts, nil, nil) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	result := new(Parameter) | ||||
| 	if err := resolver.Resolve(&ref, result, ""); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return result, nil | ||||
| } | ||||
|  | ||||
| // ResolveResponse resolves response a reference against a context root | ||||
| func ResolveResponse(root interface{}, ref Ref) (*Response, error) { | ||||
| 	return ResolveResponseWithBase(root, ref, nil) | ||||
| } | ||||
|  | ||||
| // ResolveResponseWithBase resolves response a reference against a context root and base path | ||||
| func ResolveResponseWithBase(root interface{}, ref Ref, opts *ExpandOptions) (*Response, error) { | ||||
| 	resolver, err := defaultSchemaLoader(root, opts, nil, nil) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	result := new(Response) | ||||
| 	if err := resolver.Resolve(&ref, result, ""); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return result, nil | ||||
| } | ||||
|  | ||||
| // ResolveItems resolves parameter items reference against a context root and base path. | ||||
| // | ||||
| // NOTE: stricly speaking, this construct is not supported by Swagger 2.0. | ||||
| // Similarly, $ref are forbidden in response headers. | ||||
| func ResolveItems(root interface{}, ref Ref, opts *ExpandOptions) (*Items, error) { | ||||
| 	resolver, err := defaultSchemaLoader(root, opts, nil, nil) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	basePath := "" | ||||
| 	if opts.RelativeBase != "" { | ||||
| 		basePath = opts.RelativeBase | ||||
| 	} | ||||
| 	result := new(Items) | ||||
| 	if err := resolver.Resolve(&ref, result, basePath); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return result, nil | ||||
| } | ||||
|  | ||||
| // ResolvePathItem resolves response a path item against a context root and base path | ||||
| func ResolvePathItem(root interface{}, ref Ref, opts *ExpandOptions) (*PathItem, error) { | ||||
| 	resolver, err := defaultSchemaLoader(root, opts, nil, nil) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	basePath := "" | ||||
| 	if opts.RelativeBase != "" { | ||||
| 		basePath = opts.RelativeBase | ||||
| 	} | ||||
| 	result := new(PathItem) | ||||
| 	if err := resolver.Resolve(&ref, result, basePath); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return result, nil | ||||
| } | ||||
|  | ||||
| // ExpandSpec expands the references in a swagger spec | ||||
| func ExpandSpec(spec *Swagger, options *ExpandOptions) error { | ||||
| 	resolver, err := defaultSchemaLoader(spec, options, nil, nil) | ||||
| 	// Just in case this ever returns an error. | ||||
| 	if resolver.shouldStopOnError(err) { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	// getting the base path of the spec to adjust all subsequent reference resolutions | ||||
| 	specBasePath := "" | ||||
| 	if options != nil && options.RelativeBase != "" { | ||||
| 		specBasePath, _ = absPath(options.RelativeBase) | ||||
| 	} | ||||
|  | ||||
| 	if options == nil || !options.SkipSchemas { | ||||
| 		for key, definition := range spec.Definitions { | ||||
| 			var def *Schema | ||||
| 			var err error | ||||
| 			if def, err = expandSchema(definition, []string{fmt.Sprintf("#/definitions/%s", key)}, resolver, specBasePath); resolver.shouldStopOnError(err) { | ||||
| 				return err | ||||
| 			} | ||||
| 			if def != nil { | ||||
| 				spec.Definitions[key] = *def | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	for key := range spec.Parameters { | ||||
| 		parameter := spec.Parameters[key] | ||||
| 		if err := expandParameterOrResponse(¶meter, resolver, specBasePath); resolver.shouldStopOnError(err) { | ||||
| 			return err | ||||
| 		} | ||||
| 		spec.Parameters[key] = parameter | ||||
| 	} | ||||
|  | ||||
| 	for key := range spec.Responses { | ||||
| 		response := spec.Responses[key] | ||||
| 		if err := expandParameterOrResponse(&response, resolver, specBasePath); resolver.shouldStopOnError(err) { | ||||
| 			return err | ||||
| 		} | ||||
| 		spec.Responses[key] = response | ||||
| 	} | ||||
|  | ||||
| 	if spec.Paths != nil { | ||||
| 		for key := range spec.Paths.Paths { | ||||
| 			path := spec.Paths.Paths[key] | ||||
| 			if err := expandPathItem(&path, resolver, specBasePath); resolver.shouldStopOnError(err) { | ||||
| 				return err | ||||
| 			} | ||||
| 			spec.Paths.Paths[key] = path | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // baseForRoot loads in the cache the root document and produces a fake "root" base path entry | ||||
| // for further $ref resolution | ||||
| func baseForRoot(root interface{}, cache ResolutionCache) string { | ||||
| 	// cache the root document to resolve $ref's | ||||
| 	const rootBase = "root" | ||||
| 	if root != nil { | ||||
| 		base, _ := absPath(rootBase) | ||||
| 		normalizedBase := normalizeAbsPath(base) | ||||
| 		debugLog("setting root doc in cache at: %s", normalizedBase) | ||||
| 		if cache == nil { | ||||
| 			cache = resCache | ||||
| 		} | ||||
| 		cache.Set(normalizedBase, root) | ||||
| 		return rootBase | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| // ExpandSchema expands the refs in the schema object with reference to the root object | ||||
| // go-openapi/validate uses this function | ||||
| // notice that it is impossible to reference a json schema in a different file other than root | ||||
| func ExpandSchema(schema *Schema, root interface{}, cache ResolutionCache) error { | ||||
| 	opts := &ExpandOptions{ | ||||
| 		// when a root is specified, cache the root as an in-memory document for $ref retrieval | ||||
| 		RelativeBase:    baseForRoot(root, cache), | ||||
| 		SkipSchemas:     false, | ||||
| 		ContinueOnError: false, | ||||
| 		// when no base path is specified, remaining $ref (circular) are rendered with an absolute path | ||||
| 		AbsoluteCircularRef: true, | ||||
| 	} | ||||
| 	return ExpandSchemaWithBasePath(schema, cache, opts) | ||||
| } | ||||
|  | ||||
| // ExpandSchemaWithBasePath expands the refs in the schema object, base path configured through expand options | ||||
| func ExpandSchemaWithBasePath(schema *Schema, cache ResolutionCache, opts *ExpandOptions) error { | ||||
| 	if schema == nil { | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	var basePath string | ||||
| 	if opts.RelativeBase != "" { | ||||
| 		basePath, _ = absPath(opts.RelativeBase) | ||||
| 	} | ||||
|  | ||||
| 	resolver, err := defaultSchemaLoader(nil, opts, cache, nil) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	refs := []string{""} | ||||
| 	var s *Schema | ||||
| 	if s, err = expandSchema(*schema, refs, resolver, basePath); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	*schema = *s | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func expandItems(target Schema, parentRefs []string, resolver *schemaLoader, basePath string) (*Schema, error) { | ||||
| 	if target.Items != nil { | ||||
| 		if target.Items.Schema != nil { | ||||
| 			t, err := expandSchema(*target.Items.Schema, parentRefs, resolver, basePath) | ||||
| 			if err != nil { | ||||
| 				return nil, err | ||||
| 			} | ||||
| 			*target.Items.Schema = *t | ||||
| 		} | ||||
| 		for i := range target.Items.Schemas { | ||||
| 			t, err := expandSchema(target.Items.Schemas[i], parentRefs, resolver, basePath) | ||||
| 			if err != nil { | ||||
| 				return nil, err | ||||
| 			} | ||||
| 			target.Items.Schemas[i] = *t | ||||
| 		} | ||||
| 	} | ||||
| 	return &target, nil | ||||
| } | ||||
|  | ||||
| func expandSchema(target Schema, parentRefs []string, resolver *schemaLoader, basePath string) (*Schema, error) { | ||||
| 	if target.Ref.String() == "" && target.Ref.IsRoot() { | ||||
| 		// normalizing is important | ||||
| 		newRef := normalizeFileRef(&target.Ref, basePath) | ||||
| 		target.Ref = *newRef | ||||
| 		return &target, nil | ||||
|  | ||||
| 	} | ||||
|  | ||||
| 	// change the base path of resolution when an ID is encountered | ||||
| 	// otherwise the basePath should inherit the parent's | ||||
| 	// important: ID can be relative path | ||||
| 	if target.ID != "" { | ||||
| 		debugLog("schema has ID: %s", target.ID) | ||||
| 		// handling the case when id is a folder | ||||
| 		// remember that basePath has to be a file | ||||
| 		refPath := target.ID | ||||
| 		if strings.HasSuffix(target.ID, "/") { | ||||
| 			// path.Clean here would not work correctly if basepath is http | ||||
| 			refPath = fmt.Sprintf("%s%s", refPath, "placeholder.json") | ||||
| 		} | ||||
| 		basePath = normalizePaths(refPath, basePath) | ||||
| 	} | ||||
|  | ||||
| 	var t *Schema | ||||
| 	// if Ref is found, everything else doesn't matter | ||||
| 	// Ref also changes the resolution scope of children expandSchema | ||||
| 	if target.Ref.String() != "" { | ||||
| 		// here the resolution scope is changed because a $ref was encountered | ||||
| 		normalizedRef := normalizeFileRef(&target.Ref, basePath) | ||||
| 		normalizedBasePath := normalizedRef.RemoteURI() | ||||
|  | ||||
| 		if resolver.isCircular(normalizedRef, basePath, parentRefs...) { | ||||
| 			// this means there is a cycle in the recursion tree: return the Ref | ||||
| 			// - circular refs cannot be expanded. We leave them as ref. | ||||
| 			// - denormalization means that a new local file ref is set relative to the original basePath | ||||
| 			debugLog("shortcut circular ref: basePath: %s, normalizedPath: %s, normalized ref: %s", | ||||
| 				basePath, normalizedBasePath, normalizedRef.String()) | ||||
| 			if !resolver.options.AbsoluteCircularRef { | ||||
| 				target.Ref = *denormalizeFileRef(normalizedRef, normalizedBasePath, resolver.context.basePath) | ||||
| 			} else { | ||||
| 				target.Ref = *normalizedRef | ||||
| 			} | ||||
| 			return &target, nil | ||||
| 		} | ||||
|  | ||||
| 		debugLog("basePath: %s: calling Resolve with target: %#v", basePath, target) | ||||
| 		if err := resolver.Resolve(&target.Ref, &t, basePath); resolver.shouldStopOnError(err) { | ||||
| 			return nil, err | ||||
| 		} | ||||
|  | ||||
| 		if t != nil { | ||||
| 			parentRefs = append(parentRefs, normalizedRef.String()) | ||||
| 			var err error | ||||
| 			transitiveResolver, err := resolver.transitiveResolver(basePath, target.Ref) | ||||
| 			if transitiveResolver.shouldStopOnError(err) { | ||||
| 				return nil, err | ||||
| 			} | ||||
|  | ||||
| 			basePath = resolver.updateBasePath(transitiveResolver, normalizedBasePath) | ||||
|  | ||||
| 			return expandSchema(*t, parentRefs, transitiveResolver, basePath) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	t, err := expandItems(target, parentRefs, resolver, basePath) | ||||
| 	if resolver.shouldStopOnError(err) { | ||||
| 		return &target, err | ||||
| 	} | ||||
| 	if t != nil { | ||||
| 		target = *t | ||||
| 	} | ||||
|  | ||||
| 	for i := range target.AllOf { | ||||
| 		t, err := expandSchema(target.AllOf[i], parentRefs, resolver, basePath) | ||||
| 		if resolver.shouldStopOnError(err) { | ||||
| 			return &target, err | ||||
| 		} | ||||
| 		target.AllOf[i] = *t | ||||
| 	} | ||||
| 	for i := range target.AnyOf { | ||||
| 		t, err := expandSchema(target.AnyOf[i], parentRefs, resolver, basePath) | ||||
| 		if resolver.shouldStopOnError(err) { | ||||
| 			return &target, err | ||||
| 		} | ||||
| 		target.AnyOf[i] = *t | ||||
| 	} | ||||
| 	for i := range target.OneOf { | ||||
| 		t, err := expandSchema(target.OneOf[i], parentRefs, resolver, basePath) | ||||
| 		if resolver.shouldStopOnError(err) { | ||||
| 			return &target, err | ||||
| 		} | ||||
| 		if t != nil { | ||||
| 			target.OneOf[i] = *t | ||||
| 		} | ||||
| 	} | ||||
| 	if target.Not != nil { | ||||
| 		t, err := expandSchema(*target.Not, parentRefs, resolver, basePath) | ||||
| 		if resolver.shouldStopOnError(err) { | ||||
| 			return &target, err | ||||
| 		} | ||||
| 		if t != nil { | ||||
| 			*target.Not = *t | ||||
| 		} | ||||
| 	} | ||||
| 	for k := range target.Properties { | ||||
| 		t, err := expandSchema(target.Properties[k], parentRefs, resolver, basePath) | ||||
| 		if resolver.shouldStopOnError(err) { | ||||
| 			return &target, err | ||||
| 		} | ||||
| 		if t != nil { | ||||
| 			target.Properties[k] = *t | ||||
| 		} | ||||
| 	} | ||||
| 	if target.AdditionalProperties != nil && target.AdditionalProperties.Schema != nil { | ||||
| 		t, err := expandSchema(*target.AdditionalProperties.Schema, parentRefs, resolver, basePath) | ||||
| 		if resolver.shouldStopOnError(err) { | ||||
| 			return &target, err | ||||
| 		} | ||||
| 		if t != nil { | ||||
| 			*target.AdditionalProperties.Schema = *t | ||||
| 		} | ||||
| 	} | ||||
| 	for k := range target.PatternProperties { | ||||
| 		t, err := expandSchema(target.PatternProperties[k], parentRefs, resolver, basePath) | ||||
| 		if resolver.shouldStopOnError(err) { | ||||
| 			return &target, err | ||||
| 		} | ||||
| 		if t != nil { | ||||
| 			target.PatternProperties[k] = *t | ||||
| 		} | ||||
| 	} | ||||
| 	for k := range target.Dependencies { | ||||
| 		if target.Dependencies[k].Schema != nil { | ||||
| 			t, err := expandSchema(*target.Dependencies[k].Schema, parentRefs, resolver, basePath) | ||||
| 			if resolver.shouldStopOnError(err) { | ||||
| 				return &target, err | ||||
| 			} | ||||
| 			if t != nil { | ||||
| 				*target.Dependencies[k].Schema = *t | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	if target.AdditionalItems != nil && target.AdditionalItems.Schema != nil { | ||||
| 		t, err := expandSchema(*target.AdditionalItems.Schema, parentRefs, resolver, basePath) | ||||
| 		if resolver.shouldStopOnError(err) { | ||||
| 			return &target, err | ||||
| 		} | ||||
| 		if t != nil { | ||||
| 			*target.AdditionalItems.Schema = *t | ||||
| 		} | ||||
| 	} | ||||
| 	for k := range target.Definitions { | ||||
| 		t, err := expandSchema(target.Definitions[k], parentRefs, resolver, basePath) | ||||
| 		if resolver.shouldStopOnError(err) { | ||||
| 			return &target, err | ||||
| 		} | ||||
| 		if t != nil { | ||||
| 			target.Definitions[k] = *t | ||||
| 		} | ||||
| 	} | ||||
| 	return &target, nil | ||||
| } | ||||
|  | ||||
| func expandPathItem(pathItem *PathItem, resolver *schemaLoader, basePath string) error { | ||||
| 	if pathItem == nil { | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	parentRefs := []string{} | ||||
| 	if err := resolver.deref(pathItem, parentRefs, basePath); resolver.shouldStopOnError(err) { | ||||
| 		return err | ||||
| 	} | ||||
| 	if pathItem.Ref.String() != "" { | ||||
| 		var err error | ||||
| 		resolver, err = resolver.transitiveResolver(basePath, pathItem.Ref) | ||||
| 		if resolver.shouldStopOnError(err) { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 	pathItem.Ref = Ref{} | ||||
|  | ||||
| 	for idx := range pathItem.Parameters { | ||||
| 		if err := expandParameterOrResponse(&(pathItem.Parameters[idx]), resolver, basePath); resolver.shouldStopOnError(err) { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 	ops := []*Operation{ | ||||
| 		pathItem.Get, | ||||
| 		pathItem.Head, | ||||
| 		pathItem.Options, | ||||
| 		pathItem.Put, | ||||
| 		pathItem.Post, | ||||
| 		pathItem.Patch, | ||||
| 		pathItem.Delete, | ||||
| 	} | ||||
| 	for _, op := range ops { | ||||
| 		if err := expandOperation(op, resolver, basePath); resolver.shouldStopOnError(err) { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func expandOperation(op *Operation, resolver *schemaLoader, basePath string) error { | ||||
| 	if op == nil { | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	for i := range op.Parameters { | ||||
| 		param := op.Parameters[i] | ||||
| 		if err := expandParameterOrResponse(¶m, resolver, basePath); resolver.shouldStopOnError(err) { | ||||
| 			return err | ||||
| 		} | ||||
| 		op.Parameters[i] = param | ||||
| 	} | ||||
|  | ||||
| 	if op.Responses != nil { | ||||
| 		responses := op.Responses | ||||
| 		if err := expandParameterOrResponse(responses.Default, resolver, basePath); resolver.shouldStopOnError(err) { | ||||
| 			return err | ||||
| 		} | ||||
| 		for code := range responses.StatusCodeResponses { | ||||
| 			response := responses.StatusCodeResponses[code] | ||||
| 			if err := expandParameterOrResponse(&response, resolver, basePath); resolver.shouldStopOnError(err) { | ||||
| 				return err | ||||
| 			} | ||||
| 			responses.StatusCodeResponses[code] = response | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // ExpandResponseWithRoot expands a response based on a root document, not a fetchable document | ||||
| func ExpandResponseWithRoot(response *Response, root interface{}, cache ResolutionCache) error { | ||||
| 	opts := &ExpandOptions{ | ||||
| 		RelativeBase:    baseForRoot(root, cache), | ||||
| 		SkipSchemas:     false, | ||||
| 		ContinueOnError: false, | ||||
| 		// when no base path is specified, remaining $ref (circular) are rendered with an absolute path | ||||
| 		AbsoluteCircularRef: true, | ||||
| 	} | ||||
| 	resolver, err := defaultSchemaLoader(root, opts, nil, nil) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	return expandParameterOrResponse(response, resolver, opts.RelativeBase) | ||||
| } | ||||
|  | ||||
| // ExpandResponse expands a response based on a basepath | ||||
| // This is the exported version of expandResponse | ||||
| // all refs inside response will be resolved relative to basePath | ||||
| func ExpandResponse(response *Response, basePath string) error { | ||||
| 	var specBasePath string | ||||
| 	if basePath != "" { | ||||
| 		specBasePath, _ = absPath(basePath) | ||||
| 	} | ||||
| 	opts := &ExpandOptions{ | ||||
| 		RelativeBase: specBasePath, | ||||
| 	} | ||||
| 	resolver, err := defaultSchemaLoader(nil, opts, nil, nil) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	return expandParameterOrResponse(response, resolver, opts.RelativeBase) | ||||
| } | ||||
|  | ||||
| // ExpandParameterWithRoot expands a parameter based on a root document, not a fetchable document | ||||
| func ExpandParameterWithRoot(parameter *Parameter, root interface{}, cache ResolutionCache) error { | ||||
| 	opts := &ExpandOptions{ | ||||
| 		RelativeBase:    baseForRoot(root, cache), | ||||
| 		SkipSchemas:     false, | ||||
| 		ContinueOnError: false, | ||||
| 		// when no base path is specified, remaining $ref (circular) are rendered with an absolute path | ||||
| 		AbsoluteCircularRef: true, | ||||
| 	} | ||||
| 	resolver, err := defaultSchemaLoader(root, opts, nil, nil) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	return expandParameterOrResponse(parameter, resolver, opts.RelativeBase) | ||||
| } | ||||
|  | ||||
| // ExpandParameter expands a parameter based on a basepath. | ||||
| // This is the exported version of expandParameter | ||||
| // all refs inside parameter will be resolved relative to basePath | ||||
| func ExpandParameter(parameter *Parameter, basePath string) error { | ||||
| 	var specBasePath string | ||||
| 	if basePath != "" { | ||||
| 		specBasePath, _ = absPath(basePath) | ||||
| 	} | ||||
| 	opts := &ExpandOptions{ | ||||
| 		RelativeBase: specBasePath, | ||||
| 	} | ||||
| 	resolver, err := defaultSchemaLoader(nil, opts, nil, nil) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	return expandParameterOrResponse(parameter, resolver, opts.RelativeBase) | ||||
| } | ||||
|  | ||||
| func getRefAndSchema(input interface{}) (*Ref, *Schema, error) { | ||||
| 	var ref *Ref | ||||
| 	var sch *Schema | ||||
| 	switch refable := input.(type) { | ||||
| 	case *Parameter: | ||||
| 		if refable == nil { | ||||
| 			return nil, nil, nil | ||||
| 		} | ||||
| 		ref = &refable.Ref | ||||
| 		sch = refable.Schema | ||||
| 	case *Response: | ||||
| 		if refable == nil { | ||||
| 			return nil, nil, nil | ||||
| 		} | ||||
| 		ref = &refable.Ref | ||||
| 		sch = refable.Schema | ||||
| 	default: | ||||
| 		return nil, nil, fmt.Errorf("expand: unsupported type %T. Input should be of type *Parameter or *Response", input) | ||||
| 	} | ||||
| 	return ref, sch, nil | ||||
| } | ||||
|  | ||||
| func expandParameterOrResponse(input interface{}, resolver *schemaLoader, basePath string) error { | ||||
| 	ref, _, err := getRefAndSchema(input) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if ref == nil { | ||||
| 		return nil | ||||
| 	} | ||||
| 	parentRefs := []string{} | ||||
| 	if err := resolver.deref(input, parentRefs, basePath); resolver.shouldStopOnError(err) { | ||||
| 		return err | ||||
| 	} | ||||
| 	ref, sch, _ := getRefAndSchema(input) | ||||
| 	if ref.String() != "" { | ||||
| 		transitiveResolver, err := resolver.transitiveResolver(basePath, *ref) | ||||
| 		if transitiveResolver.shouldStopOnError(err) { | ||||
| 			return err | ||||
| 		} | ||||
| 		basePath = resolver.updateBasePath(transitiveResolver, basePath) | ||||
| 		resolver = transitiveResolver | ||||
| 	} | ||||
|  | ||||
| 	if sch != nil && sch.Ref.String() != "" { | ||||
| 		// schema expanded to a $ref in another root | ||||
| 		var ern error | ||||
| 		sch.Ref, ern = NewRef(normalizePaths(sch.Ref.String(), ref.RemoteURI())) | ||||
| 		if ern != nil { | ||||
| 			return ern | ||||
| 		} | ||||
| 	} | ||||
| 	if ref != nil { | ||||
| 		*ref = Ref{} | ||||
| 	} | ||||
|  | ||||
| 	if !resolver.options.SkipSchemas && sch != nil { | ||||
| 		s, err := expandSchema(*sch, parentRefs, resolver, basePath) | ||||
| 		if resolver.shouldStopOnError(err) { | ||||
| 			return err | ||||
| 		} | ||||
| 		*sch = *s | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
							
								
								
									
										24
									
								
								vendor/github.com/go-openapi/spec/external_docs.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								vendor/github.com/go-openapi/spec/external_docs.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| // Copyright 2015 go-swagger maintainers | ||||
| // | ||||
| // 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 spec | ||||
|  | ||||
| // ExternalDocumentation allows referencing an external resource for | ||||
| // extended documentation. | ||||
| // | ||||
| // For more information: http://goo.gl/8us55a#externalDocumentationObject | ||||
| type ExternalDocumentation struct { | ||||
| 	Description string `json:"description,omitempty"` | ||||
| 	URL         string `json:"url,omitempty"` | ||||
| } | ||||
							
								
								
									
										16
									
								
								vendor/github.com/go-openapi/spec/go.mod
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								vendor/github.com/go-openapi/spec/go.mod
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| module github.com/go-openapi/spec | ||||
|  | ||||
| require ( | ||||
| 	github.com/PuerkitoBio/purell v1.1.0 // indirect | ||||
| 	github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect | ||||
| 	github.com/davecgh/go-spew v1.1.1 // indirect | ||||
| 	github.com/go-openapi/jsonpointer v0.17.0 | ||||
| 	github.com/go-openapi/jsonreference v0.17.0 | ||||
| 	github.com/go-openapi/swag v0.17.0 | ||||
| 	github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329 // indirect | ||||
| 	github.com/pmezard/go-difflib v1.0.0 // indirect | ||||
| 	github.com/stretchr/testify v1.2.2 | ||||
| 	golang.org/x/net v0.0.0-20181005035420-146acd28ed58 // indirect | ||||
| 	golang.org/x/text v0.3.0 // indirect | ||||
| 	gopkg.in/yaml.v2 v2.2.1 | ||||
| ) | ||||
							
								
								
									
										22
									
								
								vendor/github.com/go-openapi/spec/go.sum
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								vendor/github.com/go-openapi/spec/go.sum
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| github.com/PuerkitoBio/purell v1.1.0 h1:rmGxhojJlM0tuKtfdvliR84CFHljx9ag64t2xmVkjK4= | ||||
| github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= | ||||
| github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= | ||||
| github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= | ||||
| github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= | ||||
| github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||
| github.com/go-openapi/jsonpointer v0.17.0 h1:Bpl2DtZ6k7wKqfFs7e+4P08+M9I3FQgn09a1UsRUQbk= | ||||
| github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= | ||||
| github.com/go-openapi/jsonreference v0.17.0 h1:d/o7/fsLWWQZACbihvZxcyLQ59jfUVs7WOJv/ak7T7A= | ||||
| github.com/go-openapi/jsonreference v0.17.0/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= | ||||
| github.com/go-openapi/swag v0.17.0 h1:7wu+dZ5k83kvUWeAb+WUkFiUhDzwGqzTR/NhWzeo1JU= | ||||
| github.com/go-openapi/swag v0.17.0/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= | ||||
| github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329 h1:2gxZ0XQIU/5z3Z3bUBu+FXuk2pFbkN6tcwi/pjyaDic= | ||||
| github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= | ||||
| github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||||
| github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= | ||||
| github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= | ||||
| golang.org/x/net v0.0.0-20181005035420-146acd28ed58 h1:otZG8yDCO4LVps5+9bxOeNiCvgmOyt96J3roHTYs7oE= | ||||
| golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
| golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||||
| gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||
| gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | ||||
							
								
								
									
										197
									
								
								vendor/github.com/go-openapi/spec/header.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										197
									
								
								vendor/github.com/go-openapi/spec/header.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,197 @@ | ||||
| // Copyright 2015 go-swagger maintainers | ||||
| // | ||||
| // 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 spec | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"strings" | ||||
|  | ||||
| 	"github.com/go-openapi/jsonpointer" | ||||
| 	"github.com/go-openapi/swag" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	jsonArray = "array" | ||||
| ) | ||||
|  | ||||
| // HeaderProps describes a response header | ||||
| type HeaderProps struct { | ||||
| 	Description string `json:"description,omitempty"` | ||||
| } | ||||
|  | ||||
| // Header describes a header for a response of the API | ||||
| // | ||||
| // For more information: http://goo.gl/8us55a#headerObject | ||||
| type Header struct { | ||||
| 	CommonValidations | ||||
| 	SimpleSchema | ||||
| 	VendorExtensible | ||||
| 	HeaderProps | ||||
| } | ||||
|  | ||||
| // ResponseHeader creates a new header instance for use in a response | ||||
| func ResponseHeader() *Header { | ||||
| 	return new(Header) | ||||
| } | ||||
|  | ||||
| // WithDescription sets the description on this response, allows for chaining | ||||
| func (h *Header) WithDescription(description string) *Header { | ||||
| 	h.Description = description | ||||
| 	return h | ||||
| } | ||||
|  | ||||
| // Typed a fluent builder method for the type of parameter | ||||
| func (h *Header) Typed(tpe, format string) *Header { | ||||
| 	h.Type = tpe | ||||
| 	h.Format = format | ||||
| 	return h | ||||
| } | ||||
|  | ||||
| // CollectionOf a fluent builder method for an array item | ||||
| func (h *Header) CollectionOf(items *Items, format string) *Header { | ||||
| 	h.Type = jsonArray | ||||
| 	h.Items = items | ||||
| 	h.CollectionFormat = format | ||||
| 	return h | ||||
| } | ||||
|  | ||||
| // WithDefault sets the default value on this item | ||||
| func (h *Header) WithDefault(defaultValue interface{}) *Header { | ||||
| 	h.Default = defaultValue | ||||
| 	return h | ||||
| } | ||||
|  | ||||
| // WithMaxLength sets a max length value | ||||
| func (h *Header) WithMaxLength(max int64) *Header { | ||||
| 	h.MaxLength = &max | ||||
| 	return h | ||||
| } | ||||
|  | ||||
| // WithMinLength sets a min length value | ||||
| func (h *Header) WithMinLength(min int64) *Header { | ||||
| 	h.MinLength = &min | ||||
| 	return h | ||||
| } | ||||
|  | ||||
| // WithPattern sets a pattern value | ||||
| func (h *Header) WithPattern(pattern string) *Header { | ||||
| 	h.Pattern = pattern | ||||
| 	return h | ||||
| } | ||||
|  | ||||
| // WithMultipleOf sets a multiple of value | ||||
| func (h *Header) WithMultipleOf(number float64) *Header { | ||||
| 	h.MultipleOf = &number | ||||
| 	return h | ||||
| } | ||||
|  | ||||
| // WithMaximum sets a maximum number value | ||||
| func (h *Header) WithMaximum(max float64, exclusive bool) *Header { | ||||
| 	h.Maximum = &max | ||||
| 	h.ExclusiveMaximum = exclusive | ||||
| 	return h | ||||
| } | ||||
|  | ||||
| // WithMinimum sets a minimum number value | ||||
| func (h *Header) WithMinimum(min float64, exclusive bool) *Header { | ||||
| 	h.Minimum = &min | ||||
| 	h.ExclusiveMinimum = exclusive | ||||
| 	return h | ||||
| } | ||||
|  | ||||
| // WithEnum sets a the enum values (replace) | ||||
| func (h *Header) WithEnum(values ...interface{}) *Header { | ||||
| 	h.Enum = append([]interface{}{}, values...) | ||||
| 	return h | ||||
| } | ||||
|  | ||||
| // WithMaxItems sets the max items | ||||
| func (h *Header) WithMaxItems(size int64) *Header { | ||||
| 	h.MaxItems = &size | ||||
| 	return h | ||||
| } | ||||
|  | ||||
| // WithMinItems sets the min items | ||||
| func (h *Header) WithMinItems(size int64) *Header { | ||||
| 	h.MinItems = &size | ||||
| 	return h | ||||
| } | ||||
|  | ||||
| // UniqueValues dictates that this array can only have unique items | ||||
| func (h *Header) UniqueValues() *Header { | ||||
| 	h.UniqueItems = true | ||||
| 	return h | ||||
| } | ||||
|  | ||||
| // AllowDuplicates this array can have duplicates | ||||
| func (h *Header) AllowDuplicates() *Header { | ||||
| 	h.UniqueItems = false | ||||
| 	return h | ||||
| } | ||||
|  | ||||
| // MarshalJSON marshal this to JSON | ||||
| func (h Header) MarshalJSON() ([]byte, error) { | ||||
| 	b1, err := json.Marshal(h.CommonValidations) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	b2, err := json.Marshal(h.SimpleSchema) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	b3, err := json.Marshal(h.HeaderProps) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return swag.ConcatJSON(b1, b2, b3), nil | ||||
| } | ||||
|  | ||||
| // UnmarshalJSON unmarshals this header from JSON | ||||
| func (h *Header) UnmarshalJSON(data []byte) error { | ||||
| 	if err := json.Unmarshal(data, &h.CommonValidations); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if err := json.Unmarshal(data, &h.SimpleSchema); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if err := json.Unmarshal(data, &h.VendorExtensible); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return json.Unmarshal(data, &h.HeaderProps) | ||||
| } | ||||
|  | ||||
| // JSONLookup look up a value by the json property name | ||||
| func (h Header) JSONLookup(token string) (interface{}, error) { | ||||
| 	if ex, ok := h.Extensions[token]; ok { | ||||
| 		return &ex, nil | ||||
| 	} | ||||
|  | ||||
| 	r, _, err := jsonpointer.GetForToken(h.CommonValidations, token) | ||||
| 	if err != nil && !strings.HasPrefix(err.Error(), "object has no field") { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if r != nil { | ||||
| 		return r, nil | ||||
| 	} | ||||
| 	r, _, err = jsonpointer.GetForToken(h.SimpleSchema, token) | ||||
| 	if err != nil && !strings.HasPrefix(err.Error(), "object has no field") { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if r != nil { | ||||
| 		return r, nil | ||||
| 	} | ||||
| 	r, _, err = jsonpointer.GetForToken(h.HeaderProps, token) | ||||
| 	return r, err | ||||
| } | ||||
							
								
								
									
										165
									
								
								vendor/github.com/go-openapi/spec/info.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										165
									
								
								vendor/github.com/go-openapi/spec/info.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,165 @@ | ||||
| // Copyright 2015 go-swagger maintainers | ||||
| // | ||||
| // 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 spec | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"strings" | ||||
|  | ||||
| 	"github.com/go-openapi/jsonpointer" | ||||
| 	"github.com/go-openapi/swag" | ||||
| ) | ||||
|  | ||||
| // Extensions vendor specific extensions | ||||
| type Extensions map[string]interface{} | ||||
|  | ||||
| // Add adds a value to these extensions | ||||
| func (e Extensions) Add(key string, value interface{}) { | ||||
| 	realKey := strings.ToLower(key) | ||||
| 	e[realKey] = value | ||||
| } | ||||
|  | ||||
| // GetString gets a string value from the extensions | ||||
| func (e Extensions) GetString(key string) (string, bool) { | ||||
| 	if v, ok := e[strings.ToLower(key)]; ok { | ||||
| 		str, ok := v.(string) | ||||
| 		return str, ok | ||||
| 	} | ||||
| 	return "", false | ||||
| } | ||||
|  | ||||
| // GetBool gets a string value from the extensions | ||||
| func (e Extensions) GetBool(key string) (bool, bool) { | ||||
| 	if v, ok := e[strings.ToLower(key)]; ok { | ||||
| 		str, ok := v.(bool) | ||||
| 		return str, ok | ||||
| 	} | ||||
| 	return false, false | ||||
| } | ||||
|  | ||||
| // GetStringSlice gets a string value from the extensions | ||||
| func (e Extensions) GetStringSlice(key string) ([]string, bool) { | ||||
| 	if v, ok := e[strings.ToLower(key)]; ok { | ||||
| 		arr, isSlice := v.([]interface{}) | ||||
| 		if !isSlice { | ||||
| 			return nil, false | ||||
| 		} | ||||
| 		var strs []string | ||||
| 		for _, iface := range arr { | ||||
| 			str, isString := iface.(string) | ||||
| 			if !isString { | ||||
| 				return nil, false | ||||
| 			} | ||||
| 			strs = append(strs, str) | ||||
| 		} | ||||
| 		return strs, ok | ||||
| 	} | ||||
| 	return nil, false | ||||
| } | ||||
|  | ||||
| // VendorExtensible composition block. | ||||
| type VendorExtensible struct { | ||||
| 	Extensions Extensions | ||||
| } | ||||
|  | ||||
| // AddExtension adds an extension to this extensible object | ||||
| func (v *VendorExtensible) AddExtension(key string, value interface{}) { | ||||
| 	if value == nil { | ||||
| 		return | ||||
| 	} | ||||
| 	if v.Extensions == nil { | ||||
| 		v.Extensions = make(map[string]interface{}) | ||||
| 	} | ||||
| 	v.Extensions.Add(key, value) | ||||
| } | ||||
|  | ||||
| // MarshalJSON marshals the extensions to json | ||||
| func (v VendorExtensible) MarshalJSON() ([]byte, error) { | ||||
| 	toser := make(map[string]interface{}) | ||||
| 	for k, v := range v.Extensions { | ||||
| 		lk := strings.ToLower(k) | ||||
| 		if strings.HasPrefix(lk, "x-") { | ||||
| 			toser[k] = v | ||||
| 		} | ||||
| 	} | ||||
| 	return json.Marshal(toser) | ||||
| } | ||||
|  | ||||
| // UnmarshalJSON for this extensible object | ||||
| func (v *VendorExtensible) UnmarshalJSON(data []byte) error { | ||||
| 	var d map[string]interface{} | ||||
| 	if err := json.Unmarshal(data, &d); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	for k, vv := range d { | ||||
| 		lk := strings.ToLower(k) | ||||
| 		if strings.HasPrefix(lk, "x-") { | ||||
| 			if v.Extensions == nil { | ||||
| 				v.Extensions = map[string]interface{}{} | ||||
| 			} | ||||
| 			v.Extensions[k] = vv | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // InfoProps the properties for an info definition | ||||
| type InfoProps struct { | ||||
| 	Description    string       `json:"description,omitempty"` | ||||
| 	Title          string       `json:"title,omitempty"` | ||||
| 	TermsOfService string       `json:"termsOfService,omitempty"` | ||||
| 	Contact        *ContactInfo `json:"contact,omitempty"` | ||||
| 	License        *License     `json:"license,omitempty"` | ||||
| 	Version        string       `json:"version,omitempty"` | ||||
| } | ||||
|  | ||||
| // Info object provides metadata about the API. | ||||
| // The metadata can be used by the clients if needed, and can be presented in the Swagger-UI for convenience. | ||||
| // | ||||
| // For more information: http://goo.gl/8us55a#infoObject | ||||
| type Info struct { | ||||
| 	VendorExtensible | ||||
| 	InfoProps | ||||
| } | ||||
|  | ||||
| // JSONLookup look up a value by the json property name | ||||
| func (i Info) JSONLookup(token string) (interface{}, error) { | ||||
| 	if ex, ok := i.Extensions[token]; ok { | ||||
| 		return &ex, nil | ||||
| 	} | ||||
| 	r, _, err := jsonpointer.GetForToken(i.InfoProps, token) | ||||
| 	return r, err | ||||
| } | ||||
|  | ||||
| // MarshalJSON marshal this to JSON | ||||
| func (i Info) MarshalJSON() ([]byte, error) { | ||||
| 	b1, err := json.Marshal(i.InfoProps) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	b2, err := json.Marshal(i.VendorExtensible) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return swag.ConcatJSON(b1, b2), nil | ||||
| } | ||||
|  | ||||
| // UnmarshalJSON marshal this from JSON | ||||
| func (i *Info) UnmarshalJSON(data []byte) error { | ||||
| 	if err := json.Unmarshal(data, &i.InfoProps); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return json.Unmarshal(data, &i.VendorExtensible) | ||||
| } | ||||
							
								
								
									
										237
									
								
								vendor/github.com/go-openapi/spec/items.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										237
									
								
								vendor/github.com/go-openapi/spec/items.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,237 @@ | ||||
| // Copyright 2015 go-swagger maintainers | ||||
| // | ||||
| // 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 spec | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"strings" | ||||
|  | ||||
| 	"github.com/go-openapi/jsonpointer" | ||||
| 	"github.com/go-openapi/swag" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	jsonRef = "$ref" | ||||
| ) | ||||
|  | ||||
| // SimpleSchema describe swagger simple schemas for parameters and headers | ||||
| type SimpleSchema struct { | ||||
| 	Type             string      `json:"type,omitempty"` | ||||
| 	Format           string      `json:"format,omitempty"` | ||||
| 	Items            *Items      `json:"items,omitempty"` | ||||
| 	CollectionFormat string      `json:"collectionFormat,omitempty"` | ||||
| 	Default          interface{} `json:"default,omitempty"` | ||||
| 	Example          interface{} `json:"example,omitempty"` | ||||
| } | ||||
|  | ||||
| // TypeName return the type (or format) of a simple schema | ||||
| func (s *SimpleSchema) TypeName() string { | ||||
| 	if s.Format != "" { | ||||
| 		return s.Format | ||||
| 	} | ||||
| 	return s.Type | ||||
| } | ||||
|  | ||||
| // ItemsTypeName yields the type of items in a simple schema array | ||||
| func (s *SimpleSchema) ItemsTypeName() string { | ||||
| 	if s.Items == nil { | ||||
| 		return "" | ||||
| 	} | ||||
| 	return s.Items.TypeName() | ||||
| } | ||||
|  | ||||
| // CommonValidations describe common JSON-schema validations | ||||
| type CommonValidations struct { | ||||
| 	Maximum          *float64      `json:"maximum,omitempty"` | ||||
| 	ExclusiveMaximum bool          `json:"exclusiveMaximum,omitempty"` | ||||
| 	Minimum          *float64      `json:"minimum,omitempty"` | ||||
| 	ExclusiveMinimum bool          `json:"exclusiveMinimum,omitempty"` | ||||
| 	MaxLength        *int64        `json:"maxLength,omitempty"` | ||||
| 	MinLength        *int64        `json:"minLength,omitempty"` | ||||
| 	Pattern          string        `json:"pattern,omitempty"` | ||||
| 	MaxItems         *int64        `json:"maxItems,omitempty"` | ||||
| 	MinItems         *int64        `json:"minItems,omitempty"` | ||||
| 	UniqueItems      bool          `json:"uniqueItems,omitempty"` | ||||
| 	MultipleOf       *float64      `json:"multipleOf,omitempty"` | ||||
| 	Enum             []interface{} `json:"enum,omitempty"` | ||||
| } | ||||
|  | ||||
| // Items a limited subset of JSON-Schema's items object. | ||||
| // It is used by parameter definitions that are not located in "body". | ||||
| // | ||||
| // For more information: http://goo.gl/8us55a#items-object | ||||
| type Items struct { | ||||
| 	Refable | ||||
| 	CommonValidations | ||||
| 	SimpleSchema | ||||
| 	VendorExtensible | ||||
| } | ||||
|  | ||||
| // NewItems creates a new instance of items | ||||
| func NewItems() *Items { | ||||
| 	return &Items{} | ||||
| } | ||||
|  | ||||
| // Typed a fluent builder method for the type of item | ||||
| func (i *Items) Typed(tpe, format string) *Items { | ||||
| 	i.Type = tpe | ||||
| 	i.Format = format | ||||
| 	return i | ||||
| } | ||||
|  | ||||
| // CollectionOf a fluent builder method for an array item | ||||
| func (i *Items) CollectionOf(items *Items, format string) *Items { | ||||
| 	i.Type = jsonArray | ||||
| 	i.Items = items | ||||
| 	i.CollectionFormat = format | ||||
| 	return i | ||||
| } | ||||
|  | ||||
| // WithDefault sets the default value on this item | ||||
| func (i *Items) WithDefault(defaultValue interface{}) *Items { | ||||
| 	i.Default = defaultValue | ||||
| 	return i | ||||
| } | ||||
|  | ||||
| // WithMaxLength sets a max length value | ||||
| func (i *Items) WithMaxLength(max int64) *Items { | ||||
| 	i.MaxLength = &max | ||||
| 	return i | ||||
| } | ||||
|  | ||||
| // WithMinLength sets a min length value | ||||
| func (i *Items) WithMinLength(min int64) *Items { | ||||
| 	i.MinLength = &min | ||||
| 	return i | ||||
| } | ||||
|  | ||||
| // WithPattern sets a pattern value | ||||
| func (i *Items) WithPattern(pattern string) *Items { | ||||
| 	i.Pattern = pattern | ||||
| 	return i | ||||
| } | ||||
|  | ||||
| // WithMultipleOf sets a multiple of value | ||||
| func (i *Items) WithMultipleOf(number float64) *Items { | ||||
| 	i.MultipleOf = &number | ||||
| 	return i | ||||
| } | ||||
|  | ||||
| // WithMaximum sets a maximum number value | ||||
| func (i *Items) WithMaximum(max float64, exclusive bool) *Items { | ||||
| 	i.Maximum = &max | ||||
| 	i.ExclusiveMaximum = exclusive | ||||
| 	return i | ||||
| } | ||||
|  | ||||
| // WithMinimum sets a minimum number value | ||||
| func (i *Items) WithMinimum(min float64, exclusive bool) *Items { | ||||
| 	i.Minimum = &min | ||||
| 	i.ExclusiveMinimum = exclusive | ||||
| 	return i | ||||
| } | ||||
|  | ||||
| // WithEnum sets a the enum values (replace) | ||||
| func (i *Items) WithEnum(values ...interface{}) *Items { | ||||
| 	i.Enum = append([]interface{}{}, values...) | ||||
| 	return i | ||||
| } | ||||
|  | ||||
| // WithMaxItems sets the max items | ||||
| func (i *Items) WithMaxItems(size int64) *Items { | ||||
| 	i.MaxItems = &size | ||||
| 	return i | ||||
| } | ||||
|  | ||||
| // WithMinItems sets the min items | ||||
| func (i *Items) WithMinItems(size int64) *Items { | ||||
| 	i.MinItems = &size | ||||
| 	return i | ||||
| } | ||||
|  | ||||
| // UniqueValues dictates that this array can only have unique items | ||||
| func (i *Items) UniqueValues() *Items { | ||||
| 	i.UniqueItems = true | ||||
| 	return i | ||||
| } | ||||
|  | ||||
| // AllowDuplicates this array can have duplicates | ||||
| func (i *Items) AllowDuplicates() *Items { | ||||
| 	i.UniqueItems = false | ||||
| 	return i | ||||
| } | ||||
|  | ||||
| // UnmarshalJSON hydrates this items instance with the data from JSON | ||||
| func (i *Items) UnmarshalJSON(data []byte) error { | ||||
| 	var validations CommonValidations | ||||
| 	if err := json.Unmarshal(data, &validations); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	var ref Refable | ||||
| 	if err := json.Unmarshal(data, &ref); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	var simpleSchema SimpleSchema | ||||
| 	if err := json.Unmarshal(data, &simpleSchema); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	var vendorExtensible VendorExtensible | ||||
| 	if err := json.Unmarshal(data, &vendorExtensible); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	i.Refable = ref | ||||
| 	i.CommonValidations = validations | ||||
| 	i.SimpleSchema = simpleSchema | ||||
| 	i.VendorExtensible = vendorExtensible | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // MarshalJSON converts this items object to JSON | ||||
| func (i Items) MarshalJSON() ([]byte, error) { | ||||
| 	b1, err := json.Marshal(i.CommonValidations) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	b2, err := json.Marshal(i.SimpleSchema) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	b3, err := json.Marshal(i.Refable) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	b4, err := json.Marshal(i.VendorExtensible) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return swag.ConcatJSON(b4, b3, b1, b2), nil | ||||
| } | ||||
|  | ||||
| // JSONLookup look up a value by the json property name | ||||
| func (i Items) JSONLookup(token string) (interface{}, error) { | ||||
| 	if token == jsonRef { | ||||
| 		return &i.Ref, nil | ||||
| 	} | ||||
|  | ||||
| 	r, _, err := jsonpointer.GetForToken(i.CommonValidations, token) | ||||
| 	if err != nil && !strings.HasPrefix(err.Error(), "object has no field") { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if r != nil { | ||||
| 		return r, nil | ||||
| 	} | ||||
| 	r, _, err = jsonpointer.GetForToken(i.SimpleSchema, token) | ||||
| 	return r, err | ||||
| } | ||||
							
								
								
									
										23
									
								
								vendor/github.com/go-openapi/spec/license.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								vendor/github.com/go-openapi/spec/license.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| // Copyright 2015 go-swagger maintainers | ||||
| // | ||||
| // 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 spec | ||||
|  | ||||
| // License information for the exposed API. | ||||
| // | ||||
| // For more information: http://goo.gl/8us55a#licenseObject | ||||
| type License struct { | ||||
| 	Name string `json:"name,omitempty"` | ||||
| 	URL  string `json:"url,omitempty"` | ||||
| } | ||||
							
								
								
									
										152
									
								
								vendor/github.com/go-openapi/spec/normalizer.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										152
									
								
								vendor/github.com/go-openapi/spec/normalizer.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,152 @@ | ||||
| // Copyright 2015 go-swagger maintainers | ||||
| // | ||||
| // 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 spec | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"net/url" | ||||
| 	"os" | ||||
| 	"path" | ||||
| 	"path/filepath" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| // normalize absolute path for cache. | ||||
| // on Windows, drive letters should be converted to lower as scheme in net/url.URL | ||||
| func normalizeAbsPath(path string) string { | ||||
| 	u, err := url.Parse(path) | ||||
| 	if err != nil { | ||||
| 		debugLog("normalize absolute path failed: %s", err) | ||||
| 		return path | ||||
| 	} | ||||
| 	return u.String() | ||||
| } | ||||
|  | ||||
| // base or refPath could be a file path or a URL | ||||
| // given a base absolute path and a ref path, return the absolute path of refPath | ||||
| // 1) if refPath is absolute, return it | ||||
| // 2) if refPath is relative, join it with basePath keeping the scheme, hosts, and ports if exists | ||||
| // base could be a directory or a full file path | ||||
| func normalizePaths(refPath, base string) string { | ||||
| 	refURL, _ := url.Parse(refPath) | ||||
| 	if path.IsAbs(refURL.Path) || filepath.IsAbs(refPath) { | ||||
| 		// refPath is actually absolute | ||||
| 		if refURL.Host != "" { | ||||
| 			return refPath | ||||
| 		} | ||||
| 		parts := strings.Split(refPath, "#") | ||||
| 		result := filepath.FromSlash(parts[0]) | ||||
| 		if len(parts) == 2 { | ||||
| 			result += "#" + parts[1] | ||||
| 		} | ||||
| 		return result | ||||
| 	} | ||||
|  | ||||
| 	// relative refPath | ||||
| 	baseURL, _ := url.Parse(base) | ||||
| 	if !strings.HasPrefix(refPath, "#") { | ||||
| 		// combining paths | ||||
| 		if baseURL.Host != "" { | ||||
| 			baseURL.Path = path.Join(path.Dir(baseURL.Path), refURL.Path) | ||||
| 		} else { // base is a file | ||||
| 			newBase := fmt.Sprintf("%s#%s", filepath.Join(filepath.Dir(base), filepath.FromSlash(refURL.Path)), refURL.Fragment) | ||||
| 			return newBase | ||||
| 		} | ||||
|  | ||||
| 	} | ||||
| 	// copying fragment from ref to base | ||||
| 	baseURL.Fragment = refURL.Fragment | ||||
| 	return baseURL.String() | ||||
| } | ||||
|  | ||||
| // denormalizePaths returns to simplest notation on file $ref, | ||||
| // i.e. strips the absolute path and sets a path relative to the base path. | ||||
| // | ||||
| // This is currently used when we rewrite ref after a circular ref has been detected | ||||
| func denormalizeFileRef(ref *Ref, relativeBase, originalRelativeBase string) *Ref { | ||||
| 	debugLog("denormalizeFileRef for: %s", ref.String()) | ||||
|  | ||||
| 	if ref.String() == "" || ref.IsRoot() || ref.HasFragmentOnly { | ||||
| 		return ref | ||||
| 	} | ||||
| 	// strip relativeBase from URI | ||||
| 	relativeBaseURL, _ := url.Parse(relativeBase) | ||||
| 	relativeBaseURL.Fragment = "" | ||||
|  | ||||
| 	if relativeBaseURL.IsAbs() && strings.HasPrefix(ref.String(), relativeBase) { | ||||
| 		// this should work for absolute URI (e.g. http://...): we have an exact match, just trim prefix | ||||
| 		r, _ := NewRef(strings.TrimPrefix(ref.String(), relativeBase)) | ||||
| 		return &r | ||||
| 	} | ||||
|  | ||||
| 	if relativeBaseURL.IsAbs() { | ||||
| 		// other absolute URL get unchanged (i.e. with a non-empty scheme) | ||||
| 		return ref | ||||
| 	} | ||||
|  | ||||
| 	// for relative file URIs: | ||||
| 	originalRelativeBaseURL, _ := url.Parse(originalRelativeBase) | ||||
| 	originalRelativeBaseURL.Fragment = "" | ||||
| 	if strings.HasPrefix(ref.String(), originalRelativeBaseURL.String()) { | ||||
| 		// the resulting ref is in the expanded spec: return a local ref | ||||
| 		r, _ := NewRef(strings.TrimPrefix(ref.String(), originalRelativeBaseURL.String())) | ||||
| 		return &r | ||||
| 	} | ||||
|  | ||||
| 	// check if we may set a relative path, considering the original base path for this spec. | ||||
| 	// Example: | ||||
| 	//   spec is located at /mypath/spec.json | ||||
| 	//   my normalized ref points to: /mypath/item.json#/target | ||||
| 	//   expected result: item.json#/target | ||||
| 	parts := strings.Split(ref.String(), "#") | ||||
| 	relativePath, err := filepath.Rel(path.Dir(originalRelativeBaseURL.String()), parts[0]) | ||||
| 	if err != nil { | ||||
| 		// there is no common ancestor (e.g. different drives on windows) | ||||
| 		// leaves the ref unchanged | ||||
| 		return ref | ||||
| 	} | ||||
| 	if len(parts) == 2 { | ||||
| 		relativePath += "#" + parts[1] | ||||
| 	} | ||||
| 	r, _ := NewRef(relativePath) | ||||
| 	return &r | ||||
| } | ||||
|  | ||||
| // relativeBase could be an ABSOLUTE file path or an ABSOLUTE URL | ||||
| func normalizeFileRef(ref *Ref, relativeBase string) *Ref { | ||||
| 	// This is important for when the reference is pointing to the root schema | ||||
| 	if ref.String() == "" { | ||||
| 		r, _ := NewRef(relativeBase) | ||||
| 		return &r | ||||
| 	} | ||||
|  | ||||
| 	debugLog("normalizing %s against %s", ref.String(), relativeBase) | ||||
|  | ||||
| 	s := normalizePaths(ref.String(), relativeBase) | ||||
| 	r, _ := NewRef(s) | ||||
| 	return &r | ||||
| } | ||||
|  | ||||
| // absPath returns the absolute path of a file | ||||
| func absPath(fname string) (string, error) { | ||||
| 	if strings.HasPrefix(fname, "http") { | ||||
| 		return fname, nil | ||||
| 	} | ||||
| 	if filepath.IsAbs(fname) { | ||||
| 		return fname, nil | ||||
| 	} | ||||
| 	wd, err := os.Getwd() | ||||
| 	return filepath.Join(wd, fname), err | ||||
| } | ||||
							
								
								
									
										398
									
								
								vendor/github.com/go-openapi/spec/operation.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										398
									
								
								vendor/github.com/go-openapi/spec/operation.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,398 @@ | ||||
| // Copyright 2015 go-swagger maintainers | ||||
| // | ||||
| // 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 spec | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/gob" | ||||
| 	"encoding/json" | ||||
| 	"sort" | ||||
|  | ||||
| 	"github.com/go-openapi/jsonpointer" | ||||
| 	"github.com/go-openapi/swag" | ||||
| ) | ||||
|  | ||||
| func init() { | ||||
| 	//gob.Register(map[string][]interface{}{}) | ||||
| 	gob.Register(map[string]interface{}{}) | ||||
| 	gob.Register([]interface{}{}) | ||||
| } | ||||
|  | ||||
| // OperationProps describes an operation | ||||
| // | ||||
| // NOTES: | ||||
| // - schemes, when present must be from [http, https, ws, wss]: see validate | ||||
| // - Security is handled as a special case: see MarshalJSON function | ||||
| type OperationProps struct { | ||||
| 	Description  string                 `json:"description,omitempty"` | ||||
| 	Consumes     []string               `json:"consumes,omitempty"` | ||||
| 	Produces     []string               `json:"produces,omitempty"` | ||||
| 	Schemes      []string               `json:"schemes,omitempty"` | ||||
| 	Tags         []string               `json:"tags,omitempty"` | ||||
| 	Summary      string                 `json:"summary,omitempty"` | ||||
| 	ExternalDocs *ExternalDocumentation `json:"externalDocs,omitempty"` | ||||
| 	ID           string                 `json:"operationId,omitempty"` | ||||
| 	Deprecated   bool                   `json:"deprecated,omitempty"` | ||||
| 	Security     []map[string][]string  `json:"security,omitempty"` | ||||
| 	Parameters   []Parameter            `json:"parameters,omitempty"` | ||||
| 	Responses    *Responses             `json:"responses,omitempty"` | ||||
| } | ||||
|  | ||||
| // MarshalJSON takes care of serializing operation properties to JSON | ||||
| // | ||||
| // We use a custom marhaller here to handle a special cases related to | ||||
| // the Security field. We need to preserve zero length slice | ||||
| // while omitting the field when the value is nil/unset. | ||||
| func (op OperationProps) MarshalJSON() ([]byte, error) { | ||||
| 	type Alias OperationProps | ||||
| 	if op.Security == nil { | ||||
| 		return json.Marshal(&struct { | ||||
| 			Security []map[string][]string `json:"security,omitempty"` | ||||
| 			*Alias | ||||
| 		}{ | ||||
| 			Security: op.Security, | ||||
| 			Alias:    (*Alias)(&op), | ||||
| 		}) | ||||
| 	} | ||||
| 	return json.Marshal(&struct { | ||||
| 		Security []map[string][]string `json:"security"` | ||||
| 		*Alias | ||||
| 	}{ | ||||
| 		Security: op.Security, | ||||
| 		Alias:    (*Alias)(&op), | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| // Operation describes a single API operation on a path. | ||||
| // | ||||
| // For more information: http://goo.gl/8us55a#operationObject | ||||
| type Operation struct { | ||||
| 	VendorExtensible | ||||
| 	OperationProps | ||||
| } | ||||
|  | ||||
| // SuccessResponse gets a success response model | ||||
| func (o *Operation) SuccessResponse() (*Response, int, bool) { | ||||
| 	if o.Responses == nil { | ||||
| 		return nil, 0, false | ||||
| 	} | ||||
|  | ||||
| 	responseCodes := make([]int, 0, len(o.Responses.StatusCodeResponses)) | ||||
| 	for k := range o.Responses.StatusCodeResponses { | ||||
| 		if k >= 200 && k < 300 { | ||||
| 			responseCodes = append(responseCodes, k) | ||||
| 		} | ||||
| 	} | ||||
| 	if len(responseCodes) > 0 { | ||||
| 		sort.Ints(responseCodes) | ||||
| 		v := o.Responses.StatusCodeResponses[responseCodes[0]] | ||||
| 		return &v, responseCodes[0], true | ||||
| 	} | ||||
|  | ||||
| 	return o.Responses.Default, 0, false | ||||
| } | ||||
|  | ||||
| // JSONLookup look up a value by the json property name | ||||
| func (o Operation) JSONLookup(token string) (interface{}, error) { | ||||
| 	if ex, ok := o.Extensions[token]; ok { | ||||
| 		return &ex, nil | ||||
| 	} | ||||
| 	r, _, err := jsonpointer.GetForToken(o.OperationProps, token) | ||||
| 	return r, err | ||||
| } | ||||
|  | ||||
| // UnmarshalJSON hydrates this items instance with the data from JSON | ||||
| func (o *Operation) UnmarshalJSON(data []byte) error { | ||||
| 	if err := json.Unmarshal(data, &o.OperationProps); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return json.Unmarshal(data, &o.VendorExtensible) | ||||
| } | ||||
|  | ||||
| // MarshalJSON converts this items object to JSON | ||||
| func (o Operation) MarshalJSON() ([]byte, error) { | ||||
| 	b1, err := json.Marshal(o.OperationProps) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	b2, err := json.Marshal(o.VendorExtensible) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	concated := swag.ConcatJSON(b1, b2) | ||||
| 	return concated, nil | ||||
| } | ||||
|  | ||||
| // NewOperation creates a new operation instance. | ||||
| // It expects an ID as parameter but not passing an ID is also valid. | ||||
| func NewOperation(id string) *Operation { | ||||
| 	op := new(Operation) | ||||
| 	op.ID = id | ||||
| 	return op | ||||
| } | ||||
|  | ||||
| // WithID sets the ID property on this operation, allows for chaining. | ||||
| func (o *Operation) WithID(id string) *Operation { | ||||
| 	o.ID = id | ||||
| 	return o | ||||
| } | ||||
|  | ||||
| // WithDescription sets the description on this operation, allows for chaining | ||||
| func (o *Operation) WithDescription(description string) *Operation { | ||||
| 	o.Description = description | ||||
| 	return o | ||||
| } | ||||
|  | ||||
| // WithSummary sets the summary on this operation, allows for chaining | ||||
| func (o *Operation) WithSummary(summary string) *Operation { | ||||
| 	o.Summary = summary | ||||
| 	return o | ||||
| } | ||||
|  | ||||
| // WithExternalDocs sets/removes the external docs for/from this operation. | ||||
| // When you pass empty strings as params the external documents will be removed. | ||||
| // When you pass non-empty string as one value then those values will be used on the external docs object. | ||||
| // So when you pass a non-empty description, you should also pass the url and vice versa. | ||||
| func (o *Operation) WithExternalDocs(description, url string) *Operation { | ||||
| 	if description == "" && url == "" { | ||||
| 		o.ExternalDocs = nil | ||||
| 		return o | ||||
| 	} | ||||
|  | ||||
| 	if o.ExternalDocs == nil { | ||||
| 		o.ExternalDocs = &ExternalDocumentation{} | ||||
| 	} | ||||
| 	o.ExternalDocs.Description = description | ||||
| 	o.ExternalDocs.URL = url | ||||
| 	return o | ||||
| } | ||||
|  | ||||
| // Deprecate marks the operation as deprecated | ||||
| func (o *Operation) Deprecate() *Operation { | ||||
| 	o.Deprecated = true | ||||
| 	return o | ||||
| } | ||||
|  | ||||
| // Undeprecate marks the operation as not deprected | ||||
| func (o *Operation) Undeprecate() *Operation { | ||||
| 	o.Deprecated = false | ||||
| 	return o | ||||
| } | ||||
|  | ||||
| // WithConsumes adds media types for incoming body values | ||||
| func (o *Operation) WithConsumes(mediaTypes ...string) *Operation { | ||||
| 	o.Consumes = append(o.Consumes, mediaTypes...) | ||||
| 	return o | ||||
| } | ||||
|  | ||||
| // WithProduces adds media types for outgoing body values | ||||
| func (o *Operation) WithProduces(mediaTypes ...string) *Operation { | ||||
| 	o.Produces = append(o.Produces, mediaTypes...) | ||||
| 	return o | ||||
| } | ||||
|  | ||||
| // WithTags adds tags for this operation | ||||
| func (o *Operation) WithTags(tags ...string) *Operation { | ||||
| 	o.Tags = append(o.Tags, tags...) | ||||
| 	return o | ||||
| } | ||||
|  | ||||
| // AddParam adds a parameter to this operation, when a parameter for that location | ||||
| // and with that name already exists it will be replaced | ||||
| func (o *Operation) AddParam(param *Parameter) *Operation { | ||||
| 	if param == nil { | ||||
| 		return o | ||||
| 	} | ||||
|  | ||||
| 	for i, p := range o.Parameters { | ||||
| 		if p.Name == param.Name && p.In == param.In { | ||||
| 			params := append(o.Parameters[:i], *param) | ||||
| 			params = append(params, o.Parameters[i+1:]...) | ||||
| 			o.Parameters = params | ||||
| 			return o | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	o.Parameters = append(o.Parameters, *param) | ||||
| 	return o | ||||
| } | ||||
|  | ||||
| // RemoveParam removes a parameter from the operation | ||||
| func (o *Operation) RemoveParam(name, in string) *Operation { | ||||
| 	for i, p := range o.Parameters { | ||||
| 		if p.Name == name && p.In == in { | ||||
| 			o.Parameters = append(o.Parameters[:i], o.Parameters[i+1:]...) | ||||
| 			return o | ||||
| 		} | ||||
| 	} | ||||
| 	return o | ||||
| } | ||||
|  | ||||
| // SecuredWith adds a security scope to this operation. | ||||
| func (o *Operation) SecuredWith(name string, scopes ...string) *Operation { | ||||
| 	o.Security = append(o.Security, map[string][]string{name: scopes}) | ||||
| 	return o | ||||
| } | ||||
|  | ||||
| // WithDefaultResponse adds a default response to the operation. | ||||
| // Passing a nil value will remove the response | ||||
| func (o *Operation) WithDefaultResponse(response *Response) *Operation { | ||||
| 	return o.RespondsWith(0, response) | ||||
| } | ||||
|  | ||||
| // RespondsWith adds a status code response to the operation. | ||||
| // When the code is 0 the value of the response will be used as default response value. | ||||
| // When the value of the response is nil it will be removed from the operation | ||||
| func (o *Operation) RespondsWith(code int, response *Response) *Operation { | ||||
| 	if o.Responses == nil { | ||||
| 		o.Responses = new(Responses) | ||||
| 	} | ||||
| 	if code == 0 { | ||||
| 		o.Responses.Default = response | ||||
| 		return o | ||||
| 	} | ||||
| 	if response == nil { | ||||
| 		delete(o.Responses.StatusCodeResponses, code) | ||||
| 		return o | ||||
| 	} | ||||
| 	if o.Responses.StatusCodeResponses == nil { | ||||
| 		o.Responses.StatusCodeResponses = make(map[int]Response) | ||||
| 	} | ||||
| 	o.Responses.StatusCodeResponses[code] = *response | ||||
| 	return o | ||||
| } | ||||
|  | ||||
| type opsAlias OperationProps | ||||
|  | ||||
| type gobAlias struct { | ||||
| 	Security []map[string]struct { | ||||
| 		List []string | ||||
| 		Pad  bool | ||||
| 	} | ||||
| 	Alias           *opsAlias | ||||
| 	SecurityIsEmpty bool | ||||
| } | ||||
|  | ||||
| // GobEncode provides a safe gob encoder for Operation, including empty security requirements | ||||
| func (o Operation) GobEncode() ([]byte, error) { | ||||
| 	raw := struct { | ||||
| 		Ext   VendorExtensible | ||||
| 		Props OperationProps | ||||
| 	}{ | ||||
| 		Ext:   o.VendorExtensible, | ||||
| 		Props: o.OperationProps, | ||||
| 	} | ||||
| 	var b bytes.Buffer | ||||
| 	err := gob.NewEncoder(&b).Encode(raw) | ||||
| 	return b.Bytes(), err | ||||
| } | ||||
|  | ||||
| // GobDecode provides a safe gob decoder for Operation, including empty security requirements | ||||
| func (o *Operation) GobDecode(b []byte) error { | ||||
| 	var raw struct { | ||||
| 		Ext   VendorExtensible | ||||
| 		Props OperationProps | ||||
| 	} | ||||
|  | ||||
| 	buf := bytes.NewBuffer(b) | ||||
| 	err := gob.NewDecoder(buf).Decode(&raw) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	o.VendorExtensible = raw.Ext | ||||
| 	o.OperationProps = raw.Props | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // GobEncode provides a safe gob encoder for Operation, including empty security requirements | ||||
| func (op OperationProps) GobEncode() ([]byte, error) { | ||||
| 	raw := gobAlias{ | ||||
| 		Alias: (*opsAlias)(&op), | ||||
| 	} | ||||
|  | ||||
| 	var b bytes.Buffer | ||||
| 	if op.Security == nil { | ||||
| 		// nil security requirement | ||||
| 		err := gob.NewEncoder(&b).Encode(raw) | ||||
| 		return b.Bytes(), err | ||||
| 	} | ||||
|  | ||||
| 	if len(op.Security) == 0 { | ||||
| 		// empty, but non-nil security requirement | ||||
| 		raw.SecurityIsEmpty = true | ||||
| 		raw.Alias.Security = nil | ||||
| 		err := gob.NewEncoder(&b).Encode(raw) | ||||
| 		return b.Bytes(), err | ||||
| 	} | ||||
|  | ||||
| 	raw.Security = make([]map[string]struct { | ||||
| 		List []string | ||||
| 		Pad  bool | ||||
| 	}, 0, len(op.Security)) | ||||
| 	for _, req := range op.Security { | ||||
| 		v := make(map[string]struct { | ||||
| 			List []string | ||||
| 			Pad  bool | ||||
| 		}, len(req)) | ||||
| 		for k, val := range req { | ||||
| 			v[k] = struct { | ||||
| 				List []string | ||||
| 				Pad  bool | ||||
| 			}{ | ||||
| 				List: val, | ||||
| 			} | ||||
| 		} | ||||
| 		raw.Security = append(raw.Security, v) | ||||
| 	} | ||||
|  | ||||
| 	err := gob.NewEncoder(&b).Encode(raw) | ||||
| 	return b.Bytes(), err | ||||
| } | ||||
|  | ||||
| // GobDecode provides a safe gob decoder for Operation, including empty security requirements | ||||
| func (op *OperationProps) GobDecode(b []byte) error { | ||||
| 	var raw gobAlias | ||||
|  | ||||
| 	buf := bytes.NewBuffer(b) | ||||
| 	err := gob.NewDecoder(buf).Decode(&raw) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if raw.Alias == nil { | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	switch { | ||||
| 	case raw.SecurityIsEmpty: | ||||
| 		// empty, but non-nil security requirement | ||||
| 		raw.Alias.Security = []map[string][]string{} | ||||
| 	case len(raw.Alias.Security) == 0: | ||||
| 		// nil security requirement | ||||
| 		raw.Alias.Security = nil | ||||
| 	default: | ||||
| 		raw.Alias.Security = make([]map[string][]string, 0, len(raw.Security)) | ||||
| 		for _, req := range raw.Security { | ||||
| 			v := make(map[string][]string, len(req)) | ||||
| 			for k, val := range req { | ||||
| 				v[k] = make([]string, 0, len(val.List)) | ||||
| 				v[k] = append(v[k], val.List...) | ||||
| 			} | ||||
| 			raw.Alias.Security = append(raw.Alias.Security, v) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	*op = *(*OperationProps)(raw.Alias) | ||||
| 	return nil | ||||
| } | ||||
							
								
								
									
										321
									
								
								vendor/github.com/go-openapi/spec/parameter.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										321
									
								
								vendor/github.com/go-openapi/spec/parameter.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,321 @@ | ||||
| // Copyright 2015 go-swagger maintainers | ||||
| // | ||||
| // 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 spec | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"strings" | ||||
|  | ||||
| 	"github.com/go-openapi/jsonpointer" | ||||
| 	"github.com/go-openapi/swag" | ||||
| ) | ||||
|  | ||||
| // QueryParam creates a query parameter | ||||
| func QueryParam(name string) *Parameter { | ||||
| 	return &Parameter{ParamProps: ParamProps{Name: name, In: "query"}} | ||||
| } | ||||
|  | ||||
| // HeaderParam creates a header parameter, this is always required by default | ||||
| func HeaderParam(name string) *Parameter { | ||||
| 	return &Parameter{ParamProps: ParamProps{Name: name, In: "header", Required: true}} | ||||
| } | ||||
|  | ||||
| // PathParam creates a path parameter, this is always required | ||||
| func PathParam(name string) *Parameter { | ||||
| 	return &Parameter{ParamProps: ParamProps{Name: name, In: "path", Required: true}} | ||||
| } | ||||
|  | ||||
| // BodyParam creates a body parameter | ||||
| func BodyParam(name string, schema *Schema) *Parameter { | ||||
| 	return &Parameter{ParamProps: ParamProps{Name: name, In: "body", Schema: schema}, | ||||
| 		SimpleSchema: SimpleSchema{Type: "object"}} | ||||
| } | ||||
|  | ||||
| // FormDataParam creates a body parameter | ||||
| func FormDataParam(name string) *Parameter { | ||||
| 	return &Parameter{ParamProps: ParamProps{Name: name, In: "formData"}} | ||||
| } | ||||
|  | ||||
| // FileParam creates a body parameter | ||||
| func FileParam(name string) *Parameter { | ||||
| 	return &Parameter{ParamProps: ParamProps{Name: name, In: "formData"}, | ||||
| 		SimpleSchema: SimpleSchema{Type: "file"}} | ||||
| } | ||||
|  | ||||
| // SimpleArrayParam creates a param for a simple array (string, int, date etc) | ||||
| func SimpleArrayParam(name, tpe, fmt string) *Parameter { | ||||
| 	return &Parameter{ParamProps: ParamProps{Name: name}, | ||||
| 		SimpleSchema: SimpleSchema{Type: jsonArray, CollectionFormat: "csv", | ||||
| 			Items: &Items{SimpleSchema: SimpleSchema{Type: "string", Format: fmt}}}} | ||||
| } | ||||
|  | ||||
| // ParamRef creates a parameter that's a json reference | ||||
| func ParamRef(uri string) *Parameter { | ||||
| 	p := new(Parameter) | ||||
| 	p.Ref = MustCreateRef(uri) | ||||
| 	return p | ||||
| } | ||||
|  | ||||
| // ParamProps describes the specific attributes of an operation parameter | ||||
| // | ||||
| // NOTE: | ||||
| // - Schema is defined when "in" == "body": see validate | ||||
| // - AllowEmptyValue is allowed where "in" == "query" || "formData" | ||||
| type ParamProps struct { | ||||
| 	Description     string  `json:"description,omitempty"` | ||||
| 	Name            string  `json:"name,omitempty"` | ||||
| 	In              string  `json:"in,omitempty"` | ||||
| 	Required        bool    `json:"required,omitempty"` | ||||
| 	Schema          *Schema `json:"schema,omitempty"` | ||||
| 	AllowEmptyValue bool    `json:"allowEmptyValue,omitempty"` | ||||
| } | ||||
|  | ||||
| // Parameter a unique parameter is defined by a combination of a [name](#parameterName) and [location](#parameterIn). | ||||
| // | ||||
| // There are five possible parameter types. | ||||
| // * Path - Used together with [Path Templating](#pathTemplating), where the parameter value is actually part | ||||
| //   of the operation's URL. This does not include the host or base path of the API. For example, in `/items/{itemId}`, | ||||
| //   the path parameter is `itemId`. | ||||
| // * Query - Parameters that are appended to the URL. For example, in `/items?id=###`, the query parameter is `id`. | ||||
| // * Header - Custom headers that are expected as part of the request. | ||||
| // * Body - The payload that's appended to the HTTP request. Since there can only be one payload, there can only be | ||||
| //   _one_ body parameter. The name of the body parameter has no effect on the parameter itself and is used for | ||||
| //   documentation purposes only. Since Form parameters are also in the payload, body and form parameters cannot exist | ||||
| //   together for the same operation. | ||||
| // * Form - Used to describe the payload of an HTTP request when either `application/x-www-form-urlencoded` or | ||||
| //   `multipart/form-data` are used as the content type of the request (in Swagger's definition, | ||||
| //   the [`consumes`](#operationConsumes) property of an operation). This is the only parameter type that can be used | ||||
| //   to send files, thus supporting the `file` type. Since form parameters are sent in the payload, they cannot be | ||||
| //   declared together with a body parameter for the same operation. Form parameters have a different format based on | ||||
| //   the content-type used (for further details, consult http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4). | ||||
| //   * `application/x-www-form-urlencoded` - Similar to the format of Query parameters but as a payload. | ||||
| //   For example, `foo=1&bar=swagger` - both `foo` and `bar` are form parameters. This is normally used for simple | ||||
| //   parameters that are being transferred. | ||||
| //   * `multipart/form-data` - each parameter takes a section in the payload with an internal header. | ||||
| //   For example, for the header `Content-Disposition: form-data; name="submit-name"` the name of the parameter is | ||||
| //   `submit-name`. This type of form parameters is more commonly used for file transfers. | ||||
| // | ||||
| // For more information: http://goo.gl/8us55a#parameterObject | ||||
| type Parameter struct { | ||||
| 	Refable | ||||
| 	CommonValidations | ||||
| 	SimpleSchema | ||||
| 	VendorExtensible | ||||
| 	ParamProps | ||||
| } | ||||
|  | ||||
| // JSONLookup look up a value by the json property name | ||||
| func (p Parameter) JSONLookup(token string) (interface{}, error) { | ||||
| 	if ex, ok := p.Extensions[token]; ok { | ||||
| 		return &ex, nil | ||||
| 	} | ||||
| 	if token == jsonRef { | ||||
| 		return &p.Ref, nil | ||||
| 	} | ||||
|  | ||||
| 	r, _, err := jsonpointer.GetForToken(p.CommonValidations, token) | ||||
| 	if err != nil && !strings.HasPrefix(err.Error(), "object has no field") { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if r != nil { | ||||
| 		return r, nil | ||||
| 	} | ||||
| 	r, _, err = jsonpointer.GetForToken(p.SimpleSchema, token) | ||||
| 	if err != nil && !strings.HasPrefix(err.Error(), "object has no field") { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if r != nil { | ||||
| 		return r, nil | ||||
| 	} | ||||
| 	r, _, err = jsonpointer.GetForToken(p.ParamProps, token) | ||||
| 	return r, err | ||||
| } | ||||
|  | ||||
| // WithDescription a fluent builder method for the description of the parameter | ||||
| func (p *Parameter) WithDescription(description string) *Parameter { | ||||
| 	p.Description = description | ||||
| 	return p | ||||
| } | ||||
|  | ||||
| // Named a fluent builder method to override the name of the parameter | ||||
| func (p *Parameter) Named(name string) *Parameter { | ||||
| 	p.Name = name | ||||
| 	return p | ||||
| } | ||||
|  | ||||
| // WithLocation a fluent builder method to override the location of the parameter | ||||
| func (p *Parameter) WithLocation(in string) *Parameter { | ||||
| 	p.In = in | ||||
| 	return p | ||||
| } | ||||
|  | ||||
| // Typed a fluent builder method for the type of the parameter value | ||||
| func (p *Parameter) Typed(tpe, format string) *Parameter { | ||||
| 	p.Type = tpe | ||||
| 	p.Format = format | ||||
| 	return p | ||||
| } | ||||
|  | ||||
| // CollectionOf a fluent builder method for an array parameter | ||||
| func (p *Parameter) CollectionOf(items *Items, format string) *Parameter { | ||||
| 	p.Type = jsonArray | ||||
| 	p.Items = items | ||||
| 	p.CollectionFormat = format | ||||
| 	return p | ||||
| } | ||||
|  | ||||
| // WithDefault sets the default value on this parameter | ||||
| func (p *Parameter) WithDefault(defaultValue interface{}) *Parameter { | ||||
| 	p.AsOptional() // with default implies optional | ||||
| 	p.Default = defaultValue | ||||
| 	return p | ||||
| } | ||||
|  | ||||
| // AllowsEmptyValues flags this parameter as being ok with empty values | ||||
| func (p *Parameter) AllowsEmptyValues() *Parameter { | ||||
| 	p.AllowEmptyValue = true | ||||
| 	return p | ||||
| } | ||||
|  | ||||
| // NoEmptyValues flags this parameter as not liking empty values | ||||
| func (p *Parameter) NoEmptyValues() *Parameter { | ||||
| 	p.AllowEmptyValue = false | ||||
| 	return p | ||||
| } | ||||
|  | ||||
| // AsOptional flags this parameter as optional | ||||
| func (p *Parameter) AsOptional() *Parameter { | ||||
| 	p.Required = false | ||||
| 	return p | ||||
| } | ||||
|  | ||||
| // AsRequired flags this parameter as required | ||||
| func (p *Parameter) AsRequired() *Parameter { | ||||
| 	if p.Default != nil { // with a default required makes no sense | ||||
| 		return p | ||||
| 	} | ||||
| 	p.Required = true | ||||
| 	return p | ||||
| } | ||||
|  | ||||
| // WithMaxLength sets a max length value | ||||
| func (p *Parameter) WithMaxLength(max int64) *Parameter { | ||||
| 	p.MaxLength = &max | ||||
| 	return p | ||||
| } | ||||
|  | ||||
| // WithMinLength sets a min length value | ||||
| func (p *Parameter) WithMinLength(min int64) *Parameter { | ||||
| 	p.MinLength = &min | ||||
| 	return p | ||||
| } | ||||
|  | ||||
| // WithPattern sets a pattern value | ||||
| func (p *Parameter) WithPattern(pattern string) *Parameter { | ||||
| 	p.Pattern = pattern | ||||
| 	return p | ||||
| } | ||||
|  | ||||
| // WithMultipleOf sets a multiple of value | ||||
| func (p *Parameter) WithMultipleOf(number float64) *Parameter { | ||||
| 	p.MultipleOf = &number | ||||
| 	return p | ||||
| } | ||||
|  | ||||
| // WithMaximum sets a maximum number value | ||||
| func (p *Parameter) WithMaximum(max float64, exclusive bool) *Parameter { | ||||
| 	p.Maximum = &max | ||||
| 	p.ExclusiveMaximum = exclusive | ||||
| 	return p | ||||
| } | ||||
|  | ||||
| // WithMinimum sets a minimum number value | ||||
| func (p *Parameter) WithMinimum(min float64, exclusive bool) *Parameter { | ||||
| 	p.Minimum = &min | ||||
| 	p.ExclusiveMinimum = exclusive | ||||
| 	return p | ||||
| } | ||||
|  | ||||
| // WithEnum sets a the enum values (replace) | ||||
| func (p *Parameter) WithEnum(values ...interface{}) *Parameter { | ||||
| 	p.Enum = append([]interface{}{}, values...) | ||||
| 	return p | ||||
| } | ||||
|  | ||||
| // WithMaxItems sets the max items | ||||
| func (p *Parameter) WithMaxItems(size int64) *Parameter { | ||||
| 	p.MaxItems = &size | ||||
| 	return p | ||||
| } | ||||
|  | ||||
| // WithMinItems sets the min items | ||||
| func (p *Parameter) WithMinItems(size int64) *Parameter { | ||||
| 	p.MinItems = &size | ||||
| 	return p | ||||
| } | ||||
|  | ||||
| // UniqueValues dictates that this array can only have unique items | ||||
| func (p *Parameter) UniqueValues() *Parameter { | ||||
| 	p.UniqueItems = true | ||||
| 	return p | ||||
| } | ||||
|  | ||||
| // AllowDuplicates this array can have duplicates | ||||
| func (p *Parameter) AllowDuplicates() *Parameter { | ||||
| 	p.UniqueItems = false | ||||
| 	return p | ||||
| } | ||||
|  | ||||
| // UnmarshalJSON hydrates this items instance with the data from JSON | ||||
| func (p *Parameter) UnmarshalJSON(data []byte) error { | ||||
| 	if err := json.Unmarshal(data, &p.CommonValidations); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if err := json.Unmarshal(data, &p.Refable); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if err := json.Unmarshal(data, &p.SimpleSchema); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if err := json.Unmarshal(data, &p.VendorExtensible); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return json.Unmarshal(data, &p.ParamProps) | ||||
| } | ||||
|  | ||||
| // MarshalJSON converts this items object to JSON | ||||
| func (p Parameter) MarshalJSON() ([]byte, error) { | ||||
| 	b1, err := json.Marshal(p.CommonValidations) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	b2, err := json.Marshal(p.SimpleSchema) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	b3, err := json.Marshal(p.Refable) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	b4, err := json.Marshal(p.VendorExtensible) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	b5, err := json.Marshal(p.ParamProps) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return swag.ConcatJSON(b3, b1, b2, b4, b5), nil | ||||
| } | ||||
							
								
								
									
										87
									
								
								vendor/github.com/go-openapi/spec/path_item.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								vendor/github.com/go-openapi/spec/path_item.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,87 @@ | ||||
| // Copyright 2015 go-swagger maintainers | ||||
| // | ||||
| // 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 spec | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
|  | ||||
| 	"github.com/go-openapi/jsonpointer" | ||||
| 	"github.com/go-openapi/swag" | ||||
| ) | ||||
|  | ||||
| // PathItemProps the path item specific properties | ||||
| type PathItemProps struct { | ||||
| 	Get        *Operation  `json:"get,omitempty"` | ||||
| 	Put        *Operation  `json:"put,omitempty"` | ||||
| 	Post       *Operation  `json:"post,omitempty"` | ||||
| 	Delete     *Operation  `json:"delete,omitempty"` | ||||
| 	Options    *Operation  `json:"options,omitempty"` | ||||
| 	Head       *Operation  `json:"head,omitempty"` | ||||
| 	Patch      *Operation  `json:"patch,omitempty"` | ||||
| 	Parameters []Parameter `json:"parameters,omitempty"` | ||||
| } | ||||
|  | ||||
| // PathItem describes the operations available on a single path. | ||||
| // A Path Item may be empty, due to [ACL constraints](http://goo.gl/8us55a#securityFiltering). | ||||
| // The path itself is still exposed to the documentation viewer but they will | ||||
| // not know which operations and parameters are available. | ||||
| // | ||||
| // For more information: http://goo.gl/8us55a#pathItemObject | ||||
| type PathItem struct { | ||||
| 	Refable | ||||
| 	VendorExtensible | ||||
| 	PathItemProps | ||||
| } | ||||
|  | ||||
| // JSONLookup look up a value by the json property name | ||||
| func (p PathItem) JSONLookup(token string) (interface{}, error) { | ||||
| 	if ex, ok := p.Extensions[token]; ok { | ||||
| 		return &ex, nil | ||||
| 	} | ||||
| 	if token == jsonRef { | ||||
| 		return &p.Ref, nil | ||||
| 	} | ||||
| 	r, _, err := jsonpointer.GetForToken(p.PathItemProps, token) | ||||
| 	return r, err | ||||
| } | ||||
|  | ||||
| // UnmarshalJSON hydrates this items instance with the data from JSON | ||||
| func (p *PathItem) UnmarshalJSON(data []byte) error { | ||||
| 	if err := json.Unmarshal(data, &p.Refable); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if err := json.Unmarshal(data, &p.VendorExtensible); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return json.Unmarshal(data, &p.PathItemProps) | ||||
| } | ||||
|  | ||||
| // MarshalJSON converts this items object to JSON | ||||
| func (p PathItem) MarshalJSON() ([]byte, error) { | ||||
| 	b3, err := json.Marshal(p.Refable) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	b4, err := json.Marshal(p.VendorExtensible) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	b5, err := json.Marshal(p.PathItemProps) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	concated := swag.ConcatJSON(b3, b4, b5) | ||||
| 	return concated, nil | ||||
| } | ||||
							
								
								
									
										97
									
								
								vendor/github.com/go-openapi/spec/paths.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								vendor/github.com/go-openapi/spec/paths.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,97 @@ | ||||
| // Copyright 2015 go-swagger maintainers | ||||
| // | ||||
| // 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 spec | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"strings" | ||||
|  | ||||
| 	"github.com/go-openapi/swag" | ||||
| ) | ||||
|  | ||||
| // Paths holds the relative paths to the individual endpoints. | ||||
| // The path is appended to the [`basePath`](http://goo.gl/8us55a#swaggerBasePath) in order | ||||
| // to construct the full URL. | ||||
| // The Paths may be empty, due to [ACL constraints](http://goo.gl/8us55a#securityFiltering). | ||||
| // | ||||
| // For more information: http://goo.gl/8us55a#pathsObject | ||||
| type Paths struct { | ||||
| 	VendorExtensible | ||||
| 	Paths map[string]PathItem `json:"-"` // custom serializer to flatten this, each entry must start with "/" | ||||
| } | ||||
|  | ||||
| // JSONLookup look up a value by the json property name | ||||
| func (p Paths) JSONLookup(token string) (interface{}, error) { | ||||
| 	if pi, ok := p.Paths[token]; ok { | ||||
| 		return &pi, nil | ||||
| 	} | ||||
| 	if ex, ok := p.Extensions[token]; ok { | ||||
| 		return &ex, nil | ||||
| 	} | ||||
| 	return nil, fmt.Errorf("object has no field %q", token) | ||||
| } | ||||
|  | ||||
| // UnmarshalJSON hydrates this items instance with the data from JSON | ||||
| func (p *Paths) UnmarshalJSON(data []byte) error { | ||||
| 	var res map[string]json.RawMessage | ||||
| 	if err := json.Unmarshal(data, &res); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	for k, v := range res { | ||||
| 		if strings.HasPrefix(strings.ToLower(k), "x-") { | ||||
| 			if p.Extensions == nil { | ||||
| 				p.Extensions = make(map[string]interface{}) | ||||
| 			} | ||||
| 			var d interface{} | ||||
| 			if err := json.Unmarshal(v, &d); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			p.Extensions[k] = d | ||||
| 		} | ||||
| 		if strings.HasPrefix(k, "/") { | ||||
| 			if p.Paths == nil { | ||||
| 				p.Paths = make(map[string]PathItem) | ||||
| 			} | ||||
| 			var pi PathItem | ||||
| 			if err := json.Unmarshal(v, &pi); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			p.Paths[k] = pi | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // MarshalJSON converts this items object to JSON | ||||
| func (p Paths) MarshalJSON() ([]byte, error) { | ||||
| 	b1, err := json.Marshal(p.VendorExtensible) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	pths := make(map[string]PathItem) | ||||
| 	for k, v := range p.Paths { | ||||
| 		if strings.HasPrefix(k, "/") { | ||||
| 			pths[k] = v | ||||
| 		} | ||||
| 	} | ||||
| 	b2, err := json.Marshal(pths) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	concated := swag.ConcatJSON(b1, b2) | ||||
| 	return concated, nil | ||||
| } | ||||
							
								
								
									
										191
									
								
								vendor/github.com/go-openapi/spec/ref.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										191
									
								
								vendor/github.com/go-openapi/spec/ref.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,191 @@ | ||||
| // Copyright 2015 go-swagger maintainers | ||||
| // | ||||
| // 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 spec | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/gob" | ||||
| 	"encoding/json" | ||||
| 	"net/http" | ||||
| 	"os" | ||||
| 	"path/filepath" | ||||
|  | ||||
| 	"github.com/go-openapi/jsonreference" | ||||
| ) | ||||
|  | ||||
| // Refable is a struct for things that accept a $ref property | ||||
| type Refable struct { | ||||
| 	Ref Ref | ||||
| } | ||||
|  | ||||
| // MarshalJSON marshals the ref to json | ||||
| func (r Refable) MarshalJSON() ([]byte, error) { | ||||
| 	return r.Ref.MarshalJSON() | ||||
| } | ||||
|  | ||||
| // UnmarshalJSON unmarshalss the ref from json | ||||
| func (r *Refable) UnmarshalJSON(d []byte) error { | ||||
| 	return json.Unmarshal(d, &r.Ref) | ||||
| } | ||||
|  | ||||
| // Ref represents a json reference that is potentially resolved | ||||
| type Ref struct { | ||||
| 	jsonreference.Ref | ||||
| } | ||||
|  | ||||
| // RemoteURI gets the remote uri part of the ref | ||||
| func (r *Ref) RemoteURI() string { | ||||
| 	if r.String() == "" { | ||||
| 		return r.String() | ||||
| 	} | ||||
|  | ||||
| 	u := *r.GetURL() | ||||
| 	u.Fragment = "" | ||||
| 	return u.String() | ||||
| } | ||||
|  | ||||
| // IsValidURI returns true when the url the ref points to can be found | ||||
| func (r *Ref) IsValidURI(basepaths ...string) bool { | ||||
| 	if r.String() == "" { | ||||
| 		return true | ||||
| 	} | ||||
|  | ||||
| 	v := r.RemoteURI() | ||||
| 	if v == "" { | ||||
| 		return true | ||||
| 	} | ||||
|  | ||||
| 	if r.HasFullURL { | ||||
| 		rr, err := http.Get(v) | ||||
| 		if err != nil { | ||||
| 			return false | ||||
| 		} | ||||
|  | ||||
| 		return rr.StatusCode/100 == 2 | ||||
| 	} | ||||
|  | ||||
| 	if !(r.HasFileScheme || r.HasFullFilePath || r.HasURLPathOnly) { | ||||
| 		return false | ||||
| 	} | ||||
|  | ||||
| 	// check for local file | ||||
| 	pth := v | ||||
| 	if r.HasURLPathOnly { | ||||
| 		base := "." | ||||
| 		if len(basepaths) > 0 { | ||||
| 			base = filepath.Dir(filepath.Join(basepaths...)) | ||||
| 		} | ||||
| 		p, e := filepath.Abs(filepath.ToSlash(filepath.Join(base, pth))) | ||||
| 		if e != nil { | ||||
| 			return false | ||||
| 		} | ||||
| 		pth = p | ||||
| 	} | ||||
|  | ||||
| 	fi, err := os.Stat(filepath.ToSlash(pth)) | ||||
| 	if err != nil { | ||||
| 		return false | ||||
| 	} | ||||
|  | ||||
| 	return !fi.IsDir() | ||||
| } | ||||
|  | ||||
| // Inherits creates a new reference from a parent and a child | ||||
| // If the child cannot inherit from the parent, an error is returned | ||||
| func (r *Ref) Inherits(child Ref) (*Ref, error) { | ||||
| 	ref, err := r.Ref.Inherits(child.Ref) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return &Ref{Ref: *ref}, nil | ||||
| } | ||||
|  | ||||
| // NewRef creates a new instance of a ref object | ||||
| // returns an error when the reference uri is an invalid uri | ||||
| func NewRef(refURI string) (Ref, error) { | ||||
| 	ref, err := jsonreference.New(refURI) | ||||
| 	if err != nil { | ||||
| 		return Ref{}, err | ||||
| 	} | ||||
| 	return Ref{Ref: ref}, nil | ||||
| } | ||||
|  | ||||
| // MustCreateRef creates a ref object but panics when refURI is invalid. | ||||
| // Use the NewRef method for a version that returns an error. | ||||
| func MustCreateRef(refURI string) Ref { | ||||
| 	return Ref{Ref: jsonreference.MustCreateRef(refURI)} | ||||
| } | ||||
|  | ||||
| // MarshalJSON marshals this ref into a JSON object | ||||
| func (r Ref) MarshalJSON() ([]byte, error) { | ||||
| 	str := r.String() | ||||
| 	if str == "" { | ||||
| 		if r.IsRoot() { | ||||
| 			return []byte(`{"$ref":""}`), nil | ||||
| 		} | ||||
| 		return []byte("{}"), nil | ||||
| 	} | ||||
| 	v := map[string]interface{}{"$ref": str} | ||||
| 	return json.Marshal(v) | ||||
| } | ||||
|  | ||||
| // UnmarshalJSON unmarshals this ref from a JSON object | ||||
| func (r *Ref) UnmarshalJSON(d []byte) error { | ||||
| 	var v map[string]interface{} | ||||
| 	if err := json.Unmarshal(d, &v); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return r.fromMap(v) | ||||
| } | ||||
|  | ||||
| // GobEncode provides a safe gob encoder for Ref | ||||
| func (r Ref) GobEncode() ([]byte, error) { | ||||
| 	var b bytes.Buffer | ||||
| 	raw, err := r.MarshalJSON() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	err = gob.NewEncoder(&b).Encode(raw) | ||||
| 	return b.Bytes(), err | ||||
| } | ||||
|  | ||||
| // GobDecode provides a safe gob decoder for Ref | ||||
| func (r *Ref) GobDecode(b []byte) error { | ||||
| 	var raw []byte | ||||
| 	buf := bytes.NewBuffer(b) | ||||
| 	err := gob.NewDecoder(buf).Decode(&raw) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return json.Unmarshal(raw, r) | ||||
| } | ||||
|  | ||||
| func (r *Ref) fromMap(v map[string]interface{}) error { | ||||
| 	if v == nil { | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	if vv, ok := v["$ref"]; ok { | ||||
| 		if str, ok := vv.(string); ok { | ||||
| 			ref, err := jsonreference.New(str) | ||||
| 			if err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			*r = Ref{Ref: ref} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
							
								
								
									
										131
									
								
								vendor/github.com/go-openapi/spec/response.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										131
									
								
								vendor/github.com/go-openapi/spec/response.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,131 @@ | ||||
| // Copyright 2015 go-swagger maintainers | ||||
| // | ||||
| // 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 spec | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
|  | ||||
| 	"github.com/go-openapi/jsonpointer" | ||||
| 	"github.com/go-openapi/swag" | ||||
| ) | ||||
|  | ||||
| // ResponseProps properties specific to a response | ||||
| type ResponseProps struct { | ||||
| 	Description string                 `json:"description,omitempty"` | ||||
| 	Schema      *Schema                `json:"schema,omitempty"` | ||||
| 	Headers     map[string]Header      `json:"headers,omitempty"` | ||||
| 	Examples    map[string]interface{} `json:"examples,omitempty"` | ||||
| } | ||||
|  | ||||
| // Response describes a single response from an API Operation. | ||||
| // | ||||
| // For more information: http://goo.gl/8us55a#responseObject | ||||
| type Response struct { | ||||
| 	Refable | ||||
| 	ResponseProps | ||||
| 	VendorExtensible | ||||
| } | ||||
|  | ||||
| // JSONLookup look up a value by the json property name | ||||
| func (r Response) JSONLookup(token string) (interface{}, error) { | ||||
| 	if ex, ok := r.Extensions[token]; ok { | ||||
| 		return &ex, nil | ||||
| 	} | ||||
| 	if token == "$ref" { | ||||
| 		return &r.Ref, nil | ||||
| 	} | ||||
| 	ptr, _, err := jsonpointer.GetForToken(r.ResponseProps, token) | ||||
| 	return ptr, err | ||||
| } | ||||
|  | ||||
| // UnmarshalJSON hydrates this items instance with the data from JSON | ||||
| func (r *Response) UnmarshalJSON(data []byte) error { | ||||
| 	if err := json.Unmarshal(data, &r.ResponseProps); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if err := json.Unmarshal(data, &r.Refable); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return json.Unmarshal(data, &r.VendorExtensible) | ||||
| } | ||||
|  | ||||
| // MarshalJSON converts this items object to JSON | ||||
| func (r Response) MarshalJSON() ([]byte, error) { | ||||
| 	b1, err := json.Marshal(r.ResponseProps) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	b2, err := json.Marshal(r.Refable) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	b3, err := json.Marshal(r.VendorExtensible) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return swag.ConcatJSON(b1, b2, b3), nil | ||||
| } | ||||
|  | ||||
| // NewResponse creates a new response instance | ||||
| func NewResponse() *Response { | ||||
| 	return new(Response) | ||||
| } | ||||
|  | ||||
| // ResponseRef creates a response as a json reference | ||||
| func ResponseRef(url string) *Response { | ||||
| 	resp := NewResponse() | ||||
| 	resp.Ref = MustCreateRef(url) | ||||
| 	return resp | ||||
| } | ||||
|  | ||||
| // WithDescription sets the description on this response, allows for chaining | ||||
| func (r *Response) WithDescription(description string) *Response { | ||||
| 	r.Description = description | ||||
| 	return r | ||||
| } | ||||
|  | ||||
| // WithSchema sets the schema on this response, allows for chaining. | ||||
| // Passing a nil argument removes the schema from this response | ||||
| func (r *Response) WithSchema(schema *Schema) *Response { | ||||
| 	r.Schema = schema | ||||
| 	return r | ||||
| } | ||||
|  | ||||
| // AddHeader adds a header to this response | ||||
| func (r *Response) AddHeader(name string, header *Header) *Response { | ||||
| 	if header == nil { | ||||
| 		return r.RemoveHeader(name) | ||||
| 	} | ||||
| 	if r.Headers == nil { | ||||
| 		r.Headers = make(map[string]Header) | ||||
| 	} | ||||
| 	r.Headers[name] = *header | ||||
| 	return r | ||||
| } | ||||
|  | ||||
| // RemoveHeader removes a header from this response | ||||
| func (r *Response) RemoveHeader(name string) *Response { | ||||
| 	delete(r.Headers, name) | ||||
| 	return r | ||||
| } | ||||
|  | ||||
| // AddExample adds an example to this response | ||||
| func (r *Response) AddExample(mediaType string, example interface{}) *Response { | ||||
| 	if r.Examples == nil { | ||||
| 		r.Examples = make(map[string]interface{}) | ||||
| 	} | ||||
| 	r.Examples[mediaType] = example | ||||
| 	return r | ||||
| } | ||||
							
								
								
									
										127
									
								
								vendor/github.com/go-openapi/spec/responses.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										127
									
								
								vendor/github.com/go-openapi/spec/responses.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,127 @@ | ||||
| // Copyright 2015 go-swagger maintainers | ||||
| // | ||||
| // 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 spec | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"reflect" | ||||
| 	"strconv" | ||||
|  | ||||
| 	"github.com/go-openapi/swag" | ||||
| ) | ||||
|  | ||||
| // Responses is a container for the expected responses of an operation. | ||||
| // The container maps a HTTP response code to the expected response. | ||||
| // It is not expected from the documentation to necessarily cover all possible HTTP response codes, | ||||
| // since they may not be known in advance. However, it is expected from the documentation to cover | ||||
| // a successful operation response and any known errors. | ||||
| // | ||||
| // The `default` can be used a default response object for all HTTP codes that are not covered | ||||
| // individually by the specification. | ||||
| // | ||||
| // The `Responses Object` MUST contain at least one response code, and it SHOULD be the response | ||||
| // for a successful operation call. | ||||
| // | ||||
| // For more information: http://goo.gl/8us55a#responsesObject | ||||
| type Responses struct { | ||||
| 	VendorExtensible | ||||
| 	ResponsesProps | ||||
| } | ||||
|  | ||||
| // JSONLookup implements an interface to customize json pointer lookup | ||||
| func (r Responses) JSONLookup(token string) (interface{}, error) { | ||||
| 	if token == "default" { | ||||
| 		return r.Default, nil | ||||
| 	} | ||||
| 	if ex, ok := r.Extensions[token]; ok { | ||||
| 		return &ex, nil | ||||
| 	} | ||||
| 	if i, err := strconv.Atoi(token); err == nil { | ||||
| 		if scr, ok := r.StatusCodeResponses[i]; ok { | ||||
| 			return scr, nil | ||||
| 		} | ||||
| 	} | ||||
| 	return nil, fmt.Errorf("object has no field %q", token) | ||||
| } | ||||
|  | ||||
| // UnmarshalJSON hydrates this items instance with the data from JSON | ||||
| func (r *Responses) UnmarshalJSON(data []byte) error { | ||||
| 	if err := json.Unmarshal(data, &r.ResponsesProps); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if err := json.Unmarshal(data, &r.VendorExtensible); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if reflect.DeepEqual(ResponsesProps{}, r.ResponsesProps) { | ||||
| 		r.ResponsesProps = ResponsesProps{} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // MarshalJSON converts this items object to JSON | ||||
| func (r Responses) MarshalJSON() ([]byte, error) { | ||||
| 	b1, err := json.Marshal(r.ResponsesProps) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	b2, err := json.Marshal(r.VendorExtensible) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	concated := swag.ConcatJSON(b1, b2) | ||||
| 	return concated, nil | ||||
| } | ||||
|  | ||||
| // ResponsesProps describes all responses for an operation. | ||||
| // It tells what is the default response and maps all responses with a | ||||
| // HTTP status code. | ||||
| type ResponsesProps struct { | ||||
| 	Default             *Response | ||||
| 	StatusCodeResponses map[int]Response | ||||
| } | ||||
|  | ||||
| // MarshalJSON marshals responses as JSON | ||||
| func (r ResponsesProps) MarshalJSON() ([]byte, error) { | ||||
| 	toser := map[string]Response{} | ||||
| 	if r.Default != nil { | ||||
| 		toser["default"] = *r.Default | ||||
| 	} | ||||
| 	for k, v := range r.StatusCodeResponses { | ||||
| 		toser[strconv.Itoa(k)] = v | ||||
| 	} | ||||
| 	return json.Marshal(toser) | ||||
| } | ||||
|  | ||||
| // UnmarshalJSON unmarshals responses from JSON | ||||
| func (r *ResponsesProps) UnmarshalJSON(data []byte) error { | ||||
| 	var res map[string]Response | ||||
| 	if err := json.Unmarshal(data, &res); err != nil { | ||||
| 		return nil | ||||
| 	} | ||||
| 	if v, ok := res["default"]; ok { | ||||
| 		r.Default = &v | ||||
| 		delete(res, "default") | ||||
| 	} | ||||
| 	for k, v := range res { | ||||
| 		if nk, err := strconv.Atoi(k); err == nil { | ||||
| 			if r.StatusCodeResponses == nil { | ||||
| 				r.StatusCodeResponses = map[int]Response{} | ||||
| 			} | ||||
| 			r.StatusCodeResponses[nk] = v | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
							
								
								
									
										589
									
								
								vendor/github.com/go-openapi/spec/schema.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										589
									
								
								vendor/github.com/go-openapi/spec/schema.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,589 @@ | ||||
| // Copyright 2015 go-swagger maintainers | ||||
| // | ||||
| // 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 spec | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"net/url" | ||||
| 	"strings" | ||||
|  | ||||
| 	"github.com/go-openapi/jsonpointer" | ||||
| 	"github.com/go-openapi/swag" | ||||
| ) | ||||
|  | ||||
| // BooleanProperty creates a boolean property | ||||
| func BooleanProperty() *Schema { | ||||
| 	return &Schema{SchemaProps: SchemaProps{Type: []string{"boolean"}}} | ||||
| } | ||||
|  | ||||
| // BoolProperty creates a boolean property | ||||
| func BoolProperty() *Schema { return BooleanProperty() } | ||||
|  | ||||
| // StringProperty creates a string property | ||||
| func StringProperty() *Schema { | ||||
| 	return &Schema{SchemaProps: SchemaProps{Type: []string{"string"}}} | ||||
| } | ||||
|  | ||||
| // CharProperty creates a string property | ||||
| func CharProperty() *Schema { | ||||
| 	return &Schema{SchemaProps: SchemaProps{Type: []string{"string"}}} | ||||
| } | ||||
|  | ||||
| // Float64Property creates a float64/double property | ||||
| func Float64Property() *Schema { | ||||
| 	return &Schema{SchemaProps: SchemaProps{Type: []string{"number"}, Format: "double"}} | ||||
| } | ||||
|  | ||||
| // Float32Property creates a float32/float property | ||||
| func Float32Property() *Schema { | ||||
| 	return &Schema{SchemaProps: SchemaProps{Type: []string{"number"}, Format: "float"}} | ||||
| } | ||||
|  | ||||
| // Int8Property creates an int8 property | ||||
| func Int8Property() *Schema { | ||||
| 	return &Schema{SchemaProps: SchemaProps{Type: []string{"integer"}, Format: "int8"}} | ||||
| } | ||||
|  | ||||
| // Int16Property creates an int16 property | ||||
| func Int16Property() *Schema { | ||||
| 	return &Schema{SchemaProps: SchemaProps{Type: []string{"integer"}, Format: "int16"}} | ||||
| } | ||||
|  | ||||
| // Int32Property creates an int32 property | ||||
| func Int32Property() *Schema { | ||||
| 	return &Schema{SchemaProps: SchemaProps{Type: []string{"integer"}, Format: "int32"}} | ||||
| } | ||||
|  | ||||
| // Int64Property creates an int64 property | ||||
| func Int64Property() *Schema { | ||||
| 	return &Schema{SchemaProps: SchemaProps{Type: []string{"integer"}, Format: "int64"}} | ||||
| } | ||||
|  | ||||
| // StrFmtProperty creates a property for the named string format | ||||
| func StrFmtProperty(format string) *Schema { | ||||
| 	return &Schema{SchemaProps: SchemaProps{Type: []string{"string"}, Format: format}} | ||||
| } | ||||
|  | ||||
| // DateProperty creates a date property | ||||
| func DateProperty() *Schema { | ||||
| 	return &Schema{SchemaProps: SchemaProps{Type: []string{"string"}, Format: "date"}} | ||||
| } | ||||
|  | ||||
| // DateTimeProperty creates a date time property | ||||
| func DateTimeProperty() *Schema { | ||||
| 	return &Schema{SchemaProps: SchemaProps{Type: []string{"string"}, Format: "date-time"}} | ||||
| } | ||||
|  | ||||
| // MapProperty creates a map property | ||||
| func MapProperty(property *Schema) *Schema { | ||||
| 	return &Schema{SchemaProps: SchemaProps{Type: []string{"object"}, | ||||
| 		AdditionalProperties: &SchemaOrBool{Allows: true, Schema: property}}} | ||||
| } | ||||
|  | ||||
| // RefProperty creates a ref property | ||||
| func RefProperty(name string) *Schema { | ||||
| 	return &Schema{SchemaProps: SchemaProps{Ref: MustCreateRef(name)}} | ||||
| } | ||||
|  | ||||
| // RefSchema creates a ref property | ||||
| func RefSchema(name string) *Schema { | ||||
| 	return &Schema{SchemaProps: SchemaProps{Ref: MustCreateRef(name)}} | ||||
| } | ||||
|  | ||||
| // ArrayProperty creates an array property | ||||
| func ArrayProperty(items *Schema) *Schema { | ||||
| 	if items == nil { | ||||
| 		return &Schema{SchemaProps: SchemaProps{Type: []string{"array"}}} | ||||
| 	} | ||||
| 	return &Schema{SchemaProps: SchemaProps{Items: &SchemaOrArray{Schema: items}, Type: []string{"array"}}} | ||||
| } | ||||
|  | ||||
| // ComposedSchema creates a schema with allOf | ||||
| func ComposedSchema(schemas ...Schema) *Schema { | ||||
| 	s := new(Schema) | ||||
| 	s.AllOf = schemas | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // SchemaURL represents a schema url | ||||
| type SchemaURL string | ||||
|  | ||||
| // MarshalJSON marshal this to JSON | ||||
| func (r SchemaURL) MarshalJSON() ([]byte, error) { | ||||
| 	if r == "" { | ||||
| 		return []byte("{}"), nil | ||||
| 	} | ||||
| 	v := map[string]interface{}{"$schema": string(r)} | ||||
| 	return json.Marshal(v) | ||||
| } | ||||
|  | ||||
| // UnmarshalJSON unmarshal this from JSON | ||||
| func (r *SchemaURL) UnmarshalJSON(data []byte) error { | ||||
| 	var v map[string]interface{} | ||||
| 	if err := json.Unmarshal(data, &v); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return r.fromMap(v) | ||||
| } | ||||
|  | ||||
| func (r *SchemaURL) fromMap(v map[string]interface{}) error { | ||||
| 	if v == nil { | ||||
| 		return nil | ||||
| 	} | ||||
| 	if vv, ok := v["$schema"]; ok { | ||||
| 		if str, ok := vv.(string); ok { | ||||
| 			u, err := url.Parse(str) | ||||
| 			if err != nil { | ||||
| 				return err | ||||
| 			} | ||||
|  | ||||
| 			*r = SchemaURL(u.String()) | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // SchemaProps describes a JSON schema (draft 4) | ||||
| type SchemaProps struct { | ||||
| 	ID                   string            `json:"id,omitempty"` | ||||
| 	Ref                  Ref               `json:"-"` | ||||
| 	Schema               SchemaURL         `json:"-"` | ||||
| 	Description          string            `json:"description,omitempty"` | ||||
| 	Type                 StringOrArray     `json:"type,omitempty"` | ||||
| 	Format               string            `json:"format,omitempty"` | ||||
| 	Title                string            `json:"title,omitempty"` | ||||
| 	Default              interface{}       `json:"default,omitempty"` | ||||
| 	Maximum              *float64          `json:"maximum,omitempty"` | ||||
| 	ExclusiveMaximum     bool              `json:"exclusiveMaximum,omitempty"` | ||||
| 	Minimum              *float64          `json:"minimum,omitempty"` | ||||
| 	ExclusiveMinimum     bool              `json:"exclusiveMinimum,omitempty"` | ||||
| 	MaxLength            *int64            `json:"maxLength,omitempty"` | ||||
| 	MinLength            *int64            `json:"minLength,omitempty"` | ||||
| 	Pattern              string            `json:"pattern,omitempty"` | ||||
| 	MaxItems             *int64            `json:"maxItems,omitempty"` | ||||
| 	MinItems             *int64            `json:"minItems,omitempty"` | ||||
| 	UniqueItems          bool              `json:"uniqueItems,omitempty"` | ||||
| 	MultipleOf           *float64          `json:"multipleOf,omitempty"` | ||||
| 	Enum                 []interface{}     `json:"enum,omitempty"` | ||||
| 	MaxProperties        *int64            `json:"maxProperties,omitempty"` | ||||
| 	MinProperties        *int64            `json:"minProperties,omitempty"` | ||||
| 	Required             []string          `json:"required,omitempty"` | ||||
| 	Items                *SchemaOrArray    `json:"items,omitempty"` | ||||
| 	AllOf                []Schema          `json:"allOf,omitempty"` | ||||
| 	OneOf                []Schema          `json:"oneOf,omitempty"` | ||||
| 	AnyOf                []Schema          `json:"anyOf,omitempty"` | ||||
| 	Not                  *Schema           `json:"not,omitempty"` | ||||
| 	Properties           map[string]Schema `json:"properties,omitempty"` | ||||
| 	AdditionalProperties *SchemaOrBool     `json:"additionalProperties,omitempty"` | ||||
| 	PatternProperties    map[string]Schema `json:"patternProperties,omitempty"` | ||||
| 	Dependencies         Dependencies      `json:"dependencies,omitempty"` | ||||
| 	AdditionalItems      *SchemaOrBool     `json:"additionalItems,omitempty"` | ||||
| 	Definitions          Definitions       `json:"definitions,omitempty"` | ||||
| } | ||||
|  | ||||
| // SwaggerSchemaProps are additional properties supported by swagger schemas, but not JSON-schema (draft 4) | ||||
| type SwaggerSchemaProps struct { | ||||
| 	Discriminator string                 `json:"discriminator,omitempty"` | ||||
| 	ReadOnly      bool                   `json:"readOnly,omitempty"` | ||||
| 	XML           *XMLObject             `json:"xml,omitempty"` | ||||
| 	ExternalDocs  *ExternalDocumentation `json:"externalDocs,omitempty"` | ||||
| 	Example       interface{}            `json:"example,omitempty"` | ||||
| } | ||||
|  | ||||
| // Schema the schema object allows the definition of input and output data types. | ||||
| // These types can be objects, but also primitives and arrays. | ||||
| // This object is based on the [JSON Schema Specification Draft 4](http://json-schema.org/) | ||||
| // and uses a predefined subset of it. | ||||
| // On top of this subset, there are extensions provided by this specification to allow for more complete documentation. | ||||
| // | ||||
| // For more information: http://goo.gl/8us55a#schemaObject | ||||
| type Schema struct { | ||||
| 	VendorExtensible | ||||
| 	SchemaProps | ||||
| 	SwaggerSchemaProps | ||||
| 	ExtraProps map[string]interface{} `json:"-"` | ||||
| } | ||||
|  | ||||
| // JSONLookup implements an interface to customize json pointer lookup | ||||
| func (s Schema) JSONLookup(token string) (interface{}, error) { | ||||
| 	if ex, ok := s.Extensions[token]; ok { | ||||
| 		return &ex, nil | ||||
| 	} | ||||
|  | ||||
| 	if ex, ok := s.ExtraProps[token]; ok { | ||||
| 		return &ex, nil | ||||
| 	} | ||||
|  | ||||
| 	r, _, err := jsonpointer.GetForToken(s.SchemaProps, token) | ||||
| 	if r != nil || (err != nil && !strings.HasPrefix(err.Error(), "object has no field")) { | ||||
| 		return r, err | ||||
| 	} | ||||
| 	r, _, err = jsonpointer.GetForToken(s.SwaggerSchemaProps, token) | ||||
| 	return r, err | ||||
| } | ||||
|  | ||||
| // WithID sets the id for this schema, allows for chaining | ||||
| func (s *Schema) WithID(id string) *Schema { | ||||
| 	s.ID = id | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // WithTitle sets the title for this schema, allows for chaining | ||||
| func (s *Schema) WithTitle(title string) *Schema { | ||||
| 	s.Title = title | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // WithDescription sets the description for this schema, allows for chaining | ||||
| func (s *Schema) WithDescription(description string) *Schema { | ||||
| 	s.Description = description | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // WithProperties sets the properties for this schema | ||||
| func (s *Schema) WithProperties(schemas map[string]Schema) *Schema { | ||||
| 	s.Properties = schemas | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // SetProperty sets a property on this schema | ||||
| func (s *Schema) SetProperty(name string, schema Schema) *Schema { | ||||
| 	if s.Properties == nil { | ||||
| 		s.Properties = make(map[string]Schema) | ||||
| 	} | ||||
| 	s.Properties[name] = schema | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // WithAllOf sets the all of property | ||||
| func (s *Schema) WithAllOf(schemas ...Schema) *Schema { | ||||
| 	s.AllOf = schemas | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // WithMaxProperties sets the max number of properties an object can have | ||||
| func (s *Schema) WithMaxProperties(max int64) *Schema { | ||||
| 	s.MaxProperties = &max | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // WithMinProperties sets the min number of properties an object must have | ||||
| func (s *Schema) WithMinProperties(min int64) *Schema { | ||||
| 	s.MinProperties = &min | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // Typed sets the type of this schema for a single value item | ||||
| func (s *Schema) Typed(tpe, format string) *Schema { | ||||
| 	s.Type = []string{tpe} | ||||
| 	s.Format = format | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // AddType adds a type with potential format to the types for this schema | ||||
| func (s *Schema) AddType(tpe, format string) *Schema { | ||||
| 	s.Type = append(s.Type, tpe) | ||||
| 	if format != "" { | ||||
| 		s.Format = format | ||||
| 	} | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // CollectionOf a fluent builder method for an array parameter | ||||
| func (s *Schema) CollectionOf(items Schema) *Schema { | ||||
| 	s.Type = []string{jsonArray} | ||||
| 	s.Items = &SchemaOrArray{Schema: &items} | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // WithDefault sets the default value on this parameter | ||||
| func (s *Schema) WithDefault(defaultValue interface{}) *Schema { | ||||
| 	s.Default = defaultValue | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // WithRequired flags this parameter as required | ||||
| func (s *Schema) WithRequired(items ...string) *Schema { | ||||
| 	s.Required = items | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // AddRequired  adds field names to the required properties array | ||||
| func (s *Schema) AddRequired(items ...string) *Schema { | ||||
| 	s.Required = append(s.Required, items...) | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // WithMaxLength sets a max length value | ||||
| func (s *Schema) WithMaxLength(max int64) *Schema { | ||||
| 	s.MaxLength = &max | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // WithMinLength sets a min length value | ||||
| func (s *Schema) WithMinLength(min int64) *Schema { | ||||
| 	s.MinLength = &min | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // WithPattern sets a pattern value | ||||
| func (s *Schema) WithPattern(pattern string) *Schema { | ||||
| 	s.Pattern = pattern | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // WithMultipleOf sets a multiple of value | ||||
| func (s *Schema) WithMultipleOf(number float64) *Schema { | ||||
| 	s.MultipleOf = &number | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // WithMaximum sets a maximum number value | ||||
| func (s *Schema) WithMaximum(max float64, exclusive bool) *Schema { | ||||
| 	s.Maximum = &max | ||||
| 	s.ExclusiveMaximum = exclusive | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // WithMinimum sets a minimum number value | ||||
| func (s *Schema) WithMinimum(min float64, exclusive bool) *Schema { | ||||
| 	s.Minimum = &min | ||||
| 	s.ExclusiveMinimum = exclusive | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // WithEnum sets a the enum values (replace) | ||||
| func (s *Schema) WithEnum(values ...interface{}) *Schema { | ||||
| 	s.Enum = append([]interface{}{}, values...) | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // WithMaxItems sets the max items | ||||
| func (s *Schema) WithMaxItems(size int64) *Schema { | ||||
| 	s.MaxItems = &size | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // WithMinItems sets the min items | ||||
| func (s *Schema) WithMinItems(size int64) *Schema { | ||||
| 	s.MinItems = &size | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // UniqueValues dictates that this array can only have unique items | ||||
| func (s *Schema) UniqueValues() *Schema { | ||||
| 	s.UniqueItems = true | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // AllowDuplicates this array can have duplicates | ||||
| func (s *Schema) AllowDuplicates() *Schema { | ||||
| 	s.UniqueItems = false | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // AddToAllOf adds a schema to the allOf property | ||||
| func (s *Schema) AddToAllOf(schemas ...Schema) *Schema { | ||||
| 	s.AllOf = append(s.AllOf, schemas...) | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // WithDiscriminator sets the name of the discriminator field | ||||
| func (s *Schema) WithDiscriminator(discriminator string) *Schema { | ||||
| 	s.Discriminator = discriminator | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // AsReadOnly flags this schema as readonly | ||||
| func (s *Schema) AsReadOnly() *Schema { | ||||
| 	s.ReadOnly = true | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // AsWritable flags this schema as writeable (not read-only) | ||||
| func (s *Schema) AsWritable() *Schema { | ||||
| 	s.ReadOnly = false | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // WithExample sets the example for this schema | ||||
| func (s *Schema) WithExample(example interface{}) *Schema { | ||||
| 	s.Example = example | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // WithExternalDocs sets/removes the external docs for/from this schema. | ||||
| // When you pass empty strings as params the external documents will be removed. | ||||
| // When you pass non-empty string as one value then those values will be used on the external docs object. | ||||
| // So when you pass a non-empty description, you should also pass the url and vice versa. | ||||
| func (s *Schema) WithExternalDocs(description, url string) *Schema { | ||||
| 	if description == "" && url == "" { | ||||
| 		s.ExternalDocs = nil | ||||
| 		return s | ||||
| 	} | ||||
|  | ||||
| 	if s.ExternalDocs == nil { | ||||
| 		s.ExternalDocs = &ExternalDocumentation{} | ||||
| 	} | ||||
| 	s.ExternalDocs.Description = description | ||||
| 	s.ExternalDocs.URL = url | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // WithXMLName sets the xml name for the object | ||||
| func (s *Schema) WithXMLName(name string) *Schema { | ||||
| 	if s.XML == nil { | ||||
| 		s.XML = new(XMLObject) | ||||
| 	} | ||||
| 	s.XML.Name = name | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // WithXMLNamespace sets the xml namespace for the object | ||||
| func (s *Schema) WithXMLNamespace(namespace string) *Schema { | ||||
| 	if s.XML == nil { | ||||
| 		s.XML = new(XMLObject) | ||||
| 	} | ||||
| 	s.XML.Namespace = namespace | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // WithXMLPrefix sets the xml prefix for the object | ||||
| func (s *Schema) WithXMLPrefix(prefix string) *Schema { | ||||
| 	if s.XML == nil { | ||||
| 		s.XML = new(XMLObject) | ||||
| 	} | ||||
| 	s.XML.Prefix = prefix | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // AsXMLAttribute flags this object as xml attribute | ||||
| func (s *Schema) AsXMLAttribute() *Schema { | ||||
| 	if s.XML == nil { | ||||
| 		s.XML = new(XMLObject) | ||||
| 	} | ||||
| 	s.XML.Attribute = true | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // AsXMLElement flags this object as an xml node | ||||
| func (s *Schema) AsXMLElement() *Schema { | ||||
| 	if s.XML == nil { | ||||
| 		s.XML = new(XMLObject) | ||||
| 	} | ||||
| 	s.XML.Attribute = false | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // AsWrappedXML flags this object as wrapped, this is mostly useful for array types | ||||
| func (s *Schema) AsWrappedXML() *Schema { | ||||
| 	if s.XML == nil { | ||||
| 		s.XML = new(XMLObject) | ||||
| 	} | ||||
| 	s.XML.Wrapped = true | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // AsUnwrappedXML flags this object as an xml node | ||||
| func (s *Schema) AsUnwrappedXML() *Schema { | ||||
| 	if s.XML == nil { | ||||
| 		s.XML = new(XMLObject) | ||||
| 	} | ||||
| 	s.XML.Wrapped = false | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // MarshalJSON marshal this to JSON | ||||
| func (s Schema) MarshalJSON() ([]byte, error) { | ||||
| 	b1, err := json.Marshal(s.SchemaProps) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("schema props %v", err) | ||||
| 	} | ||||
| 	b2, err := json.Marshal(s.VendorExtensible) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("vendor props %v", err) | ||||
| 	} | ||||
| 	b3, err := s.Ref.MarshalJSON() | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("ref prop %v", err) | ||||
| 	} | ||||
| 	b4, err := s.Schema.MarshalJSON() | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("schema prop %v", err) | ||||
| 	} | ||||
| 	b5, err := json.Marshal(s.SwaggerSchemaProps) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("common validations %v", err) | ||||
| 	} | ||||
| 	var b6 []byte | ||||
| 	if s.ExtraProps != nil { | ||||
| 		jj, err := json.Marshal(s.ExtraProps) | ||||
| 		if err != nil { | ||||
| 			return nil, fmt.Errorf("extra props %v", err) | ||||
| 		} | ||||
| 		b6 = jj | ||||
| 	} | ||||
| 	return swag.ConcatJSON(b1, b2, b3, b4, b5, b6), nil | ||||
| } | ||||
|  | ||||
| // UnmarshalJSON marshal this from JSON | ||||
| func (s *Schema) UnmarshalJSON(data []byte) error { | ||||
| 	props := struct { | ||||
| 		SchemaProps | ||||
| 		SwaggerSchemaProps | ||||
| 	}{} | ||||
| 	if err := json.Unmarshal(data, &props); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	sch := Schema{ | ||||
| 		SchemaProps:        props.SchemaProps, | ||||
| 		SwaggerSchemaProps: props.SwaggerSchemaProps, | ||||
| 	} | ||||
|  | ||||
| 	var d map[string]interface{} | ||||
| 	if err := json.Unmarshal(data, &d); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	_ = sch.Ref.fromMap(d) | ||||
| 	_ = sch.Schema.fromMap(d) | ||||
|  | ||||
| 	delete(d, "$ref") | ||||
| 	delete(d, "$schema") | ||||
| 	for _, pn := range swag.DefaultJSONNameProvider.GetJSONNames(s) { | ||||
| 		delete(d, pn) | ||||
| 	} | ||||
|  | ||||
| 	for k, vv := range d { | ||||
| 		lk := strings.ToLower(k) | ||||
| 		if strings.HasPrefix(lk, "x-") { | ||||
| 			if sch.Extensions == nil { | ||||
| 				sch.Extensions = map[string]interface{}{} | ||||
| 			} | ||||
| 			sch.Extensions[k] = vv | ||||
| 			continue | ||||
| 		} | ||||
| 		if sch.ExtraProps == nil { | ||||
| 			sch.ExtraProps = map[string]interface{}{} | ||||
| 		} | ||||
| 		sch.ExtraProps[k] = vv | ||||
| 	} | ||||
|  | ||||
| 	*s = sch | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
							
								
								
									
										275
									
								
								vendor/github.com/go-openapi/spec/schema_loader.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										275
									
								
								vendor/github.com/go-openapi/spec/schema_loader.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,275 @@ | ||||
| // Copyright 2015 go-swagger maintainers | ||||
| // | ||||
| // 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 spec | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"log" | ||||
| 	"net/url" | ||||
| 	"reflect" | ||||
| 	"strings" | ||||
|  | ||||
| 	"github.com/go-openapi/swag" | ||||
| ) | ||||
|  | ||||
| // PathLoader function to use when loading remote refs | ||||
| var PathLoader func(string) (json.RawMessage, error) | ||||
|  | ||||
| func init() { | ||||
| 	PathLoader = func(path string) (json.RawMessage, error) { | ||||
| 		data, err := swag.LoadFromFileOrHTTP(path) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		return json.RawMessage(data), nil | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // resolverContext allows to share a context during spec processing. | ||||
| // At the moment, it just holds the index of circular references found. | ||||
| type resolverContext struct { | ||||
| 	// circulars holds all visited circular references, which allows shortcuts. | ||||
| 	// NOTE: this is not just a performance improvement: it is required to figure out | ||||
| 	// circular references which participate several cycles. | ||||
| 	// This structure is privately instantiated and needs not be locked against | ||||
| 	// concurrent access, unless we chose to implement a parallel spec walking. | ||||
| 	circulars map[string]bool | ||||
| 	basePath  string | ||||
| } | ||||
|  | ||||
| func newResolverContext(originalBasePath string) *resolverContext { | ||||
| 	return &resolverContext{ | ||||
| 		circulars: make(map[string]bool), | ||||
| 		basePath:  originalBasePath, // keep the root base path in context | ||||
| 	} | ||||
| } | ||||
|  | ||||
| type schemaLoader struct { | ||||
| 	root    interface{} | ||||
| 	options *ExpandOptions | ||||
| 	cache   ResolutionCache | ||||
| 	context *resolverContext | ||||
| 	loadDoc func(string) (json.RawMessage, error) | ||||
| } | ||||
|  | ||||
| func (r *schemaLoader) transitiveResolver(basePath string, ref Ref) (*schemaLoader, error) { | ||||
| 	if ref.IsRoot() || ref.HasFragmentOnly { | ||||
| 		return r, nil | ||||
| 	} | ||||
|  | ||||
| 	baseRef, _ := NewRef(basePath) | ||||
| 	currentRef := normalizeFileRef(&ref, basePath) | ||||
| 	if strings.HasPrefix(currentRef.String(), baseRef.String()) { | ||||
| 		return r, nil | ||||
| 	} | ||||
|  | ||||
| 	// Set a new root to resolve against | ||||
| 	rootURL := currentRef.GetURL() | ||||
| 	rootURL.Fragment = "" | ||||
| 	root, _ := r.cache.Get(rootURL.String()) | ||||
|  | ||||
| 	// shallow copy of resolver options to set a new RelativeBase when | ||||
| 	// traversing multiple documents | ||||
| 	newOptions := r.options | ||||
| 	newOptions.RelativeBase = rootURL.String() | ||||
| 	debugLog("setting new root: %s", newOptions.RelativeBase) | ||||
| 	resolver, err := defaultSchemaLoader(root, newOptions, r.cache, r.context) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	return resolver, nil | ||||
| } | ||||
|  | ||||
| func (r *schemaLoader) updateBasePath(transitive *schemaLoader, basePath string) string { | ||||
| 	if transitive != r { | ||||
| 		debugLog("got a new resolver") | ||||
| 		if transitive.options != nil && transitive.options.RelativeBase != "" { | ||||
| 			basePath, _ = absPath(transitive.options.RelativeBase) | ||||
| 			debugLog("new basePath = %s", basePath) | ||||
| 		} | ||||
| 	} | ||||
| 	return basePath | ||||
| } | ||||
|  | ||||
| func (r *schemaLoader) resolveRef(ref *Ref, target interface{}, basePath string) error { | ||||
| 	tgt := reflect.ValueOf(target) | ||||
| 	if tgt.Kind() != reflect.Ptr { | ||||
| 		return fmt.Errorf("resolve ref: target needs to be a pointer") | ||||
| 	} | ||||
|  | ||||
| 	refURL := ref.GetURL() | ||||
| 	if refURL == nil { | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	var res interface{} | ||||
| 	var data interface{} | ||||
| 	var err error | ||||
| 	// Resolve against the root if it isn't nil, and if ref is pointing at the root, or has a fragment only which means | ||||
| 	// it is pointing somewhere in the root. | ||||
| 	root := r.root | ||||
| 	if (ref.IsRoot() || ref.HasFragmentOnly) && root == nil && basePath != "" { | ||||
| 		if baseRef, erb := NewRef(basePath); erb == nil { | ||||
| 			root, _, _, _ = r.load(baseRef.GetURL()) | ||||
| 		} | ||||
| 	} | ||||
| 	if (ref.IsRoot() || ref.HasFragmentOnly) && root != nil { | ||||
| 		data = root | ||||
| 	} else { | ||||
| 		baseRef := normalizeFileRef(ref, basePath) | ||||
| 		debugLog("current ref is: %s", ref.String()) | ||||
| 		debugLog("current ref normalized file: %s", baseRef.String()) | ||||
| 		data, _, _, err = r.load(baseRef.GetURL()) | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	res = data | ||||
| 	if ref.String() != "" { | ||||
| 		res, _, err = ref.GetPointer().Get(data) | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 	return swag.DynamicJSONToStruct(res, target) | ||||
| } | ||||
|  | ||||
| func (r *schemaLoader) load(refURL *url.URL) (interface{}, url.URL, bool, error) { | ||||
| 	debugLog("loading schema from url: %s", refURL) | ||||
| 	toFetch := *refURL | ||||
| 	toFetch.Fragment = "" | ||||
|  | ||||
| 	normalized := normalizeAbsPath(toFetch.String()) | ||||
|  | ||||
| 	data, fromCache := r.cache.Get(normalized) | ||||
| 	if !fromCache { | ||||
| 		b, err := r.loadDoc(normalized) | ||||
| 		if err != nil { | ||||
| 			return nil, url.URL{}, false, err | ||||
| 		} | ||||
|  | ||||
| 		if err := json.Unmarshal(b, &data); err != nil { | ||||
| 			return nil, url.URL{}, false, err | ||||
| 		} | ||||
| 		r.cache.Set(normalized, data) | ||||
| 	} | ||||
|  | ||||
| 	return data, toFetch, fromCache, nil | ||||
| } | ||||
|  | ||||
| // isCircular detects cycles in sequences of $ref. | ||||
| // It relies on a private context (which needs not be locked). | ||||
| func (r *schemaLoader) isCircular(ref *Ref, basePath string, parentRefs ...string) (foundCycle bool) { | ||||
| 	normalizedRef := normalizePaths(ref.String(), basePath) | ||||
| 	if _, ok := r.context.circulars[normalizedRef]; ok { | ||||
| 		// circular $ref has been already detected in another explored cycle | ||||
| 		foundCycle = true | ||||
| 		return | ||||
| 	} | ||||
| 	foundCycle = swag.ContainsStringsCI(parentRefs, normalizedRef) | ||||
| 	if foundCycle { | ||||
| 		r.context.circulars[normalizedRef] = true | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // Resolve resolves a reference against basePath and stores the result in target | ||||
| // Resolve is not in charge of following references, it only resolves ref by following its URL | ||||
| // if the schema that ref is referring to has more refs in it. Resolve doesn't resolve them | ||||
| // if basePath is an empty string, ref is resolved against the root schema stored in the schemaLoader struct | ||||
| func (r *schemaLoader) Resolve(ref *Ref, target interface{}, basePath string) error { | ||||
| 	return r.resolveRef(ref, target, basePath) | ||||
| } | ||||
|  | ||||
| func (r *schemaLoader) deref(input interface{}, parentRefs []string, basePath string) error { | ||||
| 	var ref *Ref | ||||
| 	switch refable := input.(type) { | ||||
| 	case *Schema: | ||||
| 		ref = &refable.Ref | ||||
| 	case *Parameter: | ||||
| 		ref = &refable.Ref | ||||
| 	case *Response: | ||||
| 		ref = &refable.Ref | ||||
| 	case *PathItem: | ||||
| 		ref = &refable.Ref | ||||
| 	default: | ||||
| 		return fmt.Errorf("deref: unsupported type %T", input) | ||||
| 	} | ||||
|  | ||||
| 	curRef := ref.String() | ||||
| 	if curRef != "" { | ||||
| 		normalizedRef := normalizeFileRef(ref, basePath) | ||||
| 		normalizedBasePath := normalizedRef.RemoteURI() | ||||
|  | ||||
| 		if r.isCircular(normalizedRef, basePath, parentRefs...) { | ||||
| 			return nil | ||||
| 		} | ||||
|  | ||||
| 		if err := r.resolveRef(ref, input, basePath); r.shouldStopOnError(err) { | ||||
| 			return err | ||||
| 		} | ||||
|  | ||||
| 		// NOTE(fredbi): removed basePath check => needs more testing | ||||
| 		if ref.String() != "" && ref.String() != curRef { | ||||
| 			parentRefs = append(parentRefs, normalizedRef.String()) | ||||
| 			return r.deref(input, parentRefs, normalizedBasePath) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (r *schemaLoader) shouldStopOnError(err error) bool { | ||||
| 	if err != nil && !r.options.ContinueOnError { | ||||
| 		return true | ||||
| 	} | ||||
|  | ||||
| 	if err != nil { | ||||
| 		log.Println(err) | ||||
| 	} | ||||
|  | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func defaultSchemaLoader( | ||||
| 	root interface{}, | ||||
| 	expandOptions *ExpandOptions, | ||||
| 	cache ResolutionCache, | ||||
| 	context *resolverContext) (*schemaLoader, error) { | ||||
|  | ||||
| 	if cache == nil { | ||||
| 		cache = resCache | ||||
| 	} | ||||
| 	if expandOptions == nil { | ||||
| 		expandOptions = &ExpandOptions{} | ||||
| 	} | ||||
| 	absBase, _ := absPath(expandOptions.RelativeBase) | ||||
| 	if context == nil { | ||||
| 		context = newResolverContext(absBase) | ||||
| 	} | ||||
| 	return &schemaLoader{ | ||||
| 		root:    root, | ||||
| 		options: expandOptions, | ||||
| 		cache:   cache, | ||||
| 		context: context, | ||||
| 		loadDoc: func(path string) (json.RawMessage, error) { | ||||
| 			debugLog("fetching document at %q", path) | ||||
| 			return PathLoader(path) | ||||
| 		}, | ||||
| 	}, nil | ||||
| } | ||||
							
								
								
									
										140
									
								
								vendor/github.com/go-openapi/spec/security_scheme.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										140
									
								
								vendor/github.com/go-openapi/spec/security_scheme.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,140 @@ | ||||
| // Copyright 2015 go-swagger maintainers | ||||
| // | ||||
| // 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 spec | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
|  | ||||
| 	"github.com/go-openapi/jsonpointer" | ||||
| 	"github.com/go-openapi/swag" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	basic       = "basic" | ||||
| 	apiKey      = "apiKey" | ||||
| 	oauth2      = "oauth2" | ||||
| 	implicit    = "implicit" | ||||
| 	password    = "password" | ||||
| 	application = "application" | ||||
| 	accessCode  = "accessCode" | ||||
| ) | ||||
|  | ||||
| // BasicAuth creates a basic auth security scheme | ||||
| func BasicAuth() *SecurityScheme { | ||||
| 	return &SecurityScheme{SecuritySchemeProps: SecuritySchemeProps{Type: basic}} | ||||
| } | ||||
|  | ||||
| // APIKeyAuth creates an api key auth security scheme | ||||
| func APIKeyAuth(fieldName, valueSource string) *SecurityScheme { | ||||
| 	return &SecurityScheme{SecuritySchemeProps: SecuritySchemeProps{Type: apiKey, Name: fieldName, In: valueSource}} | ||||
| } | ||||
|  | ||||
| // OAuth2Implicit creates an implicit flow oauth2 security scheme | ||||
| func OAuth2Implicit(authorizationURL string) *SecurityScheme { | ||||
| 	return &SecurityScheme{SecuritySchemeProps: SecuritySchemeProps{ | ||||
| 		Type:             oauth2, | ||||
| 		Flow:             implicit, | ||||
| 		AuthorizationURL: authorizationURL, | ||||
| 	}} | ||||
| } | ||||
|  | ||||
| // OAuth2Password creates a password flow oauth2 security scheme | ||||
| func OAuth2Password(tokenURL string) *SecurityScheme { | ||||
| 	return &SecurityScheme{SecuritySchemeProps: SecuritySchemeProps{ | ||||
| 		Type:     oauth2, | ||||
| 		Flow:     password, | ||||
| 		TokenURL: tokenURL, | ||||
| 	}} | ||||
| } | ||||
|  | ||||
| // OAuth2Application creates an application flow oauth2 security scheme | ||||
| func OAuth2Application(tokenURL string) *SecurityScheme { | ||||
| 	return &SecurityScheme{SecuritySchemeProps: SecuritySchemeProps{ | ||||
| 		Type:     oauth2, | ||||
| 		Flow:     application, | ||||
| 		TokenURL: tokenURL, | ||||
| 	}} | ||||
| } | ||||
|  | ||||
| // OAuth2AccessToken creates an access token flow oauth2 security scheme | ||||
| func OAuth2AccessToken(authorizationURL, tokenURL string) *SecurityScheme { | ||||
| 	return &SecurityScheme{SecuritySchemeProps: SecuritySchemeProps{ | ||||
| 		Type:             oauth2, | ||||
| 		Flow:             accessCode, | ||||
| 		AuthorizationURL: authorizationURL, | ||||
| 		TokenURL:         tokenURL, | ||||
| 	}} | ||||
| } | ||||
|  | ||||
| // SecuritySchemeProps describes a swagger security scheme in the securityDefinitions section | ||||
| type SecuritySchemeProps struct { | ||||
| 	Description      string            `json:"description,omitempty"` | ||||
| 	Type             string            `json:"type"` | ||||
| 	Name             string            `json:"name,omitempty"`             // api key | ||||
| 	In               string            `json:"in,omitempty"`               // api key | ||||
| 	Flow             string            `json:"flow,omitempty"`             // oauth2 | ||||
| 	AuthorizationURL string            `json:"authorizationUrl,omitempty"` // oauth2 | ||||
| 	TokenURL         string            `json:"tokenUrl,omitempty"`         // oauth2 | ||||
| 	Scopes           map[string]string `json:"scopes,omitempty"`           // oauth2 | ||||
| } | ||||
|  | ||||
| // AddScope adds a scope to this security scheme | ||||
| func (s *SecuritySchemeProps) AddScope(scope, description string) { | ||||
| 	if s.Scopes == nil { | ||||
| 		s.Scopes = make(map[string]string) | ||||
| 	} | ||||
| 	s.Scopes[scope] = description | ||||
| } | ||||
|  | ||||
| // SecurityScheme allows the definition of a security scheme that can be used by the operations. | ||||
| // Supported schemes are basic authentication, an API key (either as a header or as a query parameter) | ||||
| // and OAuth2's common flows (implicit, password, application and access code). | ||||
| // | ||||
| // For more information: http://goo.gl/8us55a#securitySchemeObject | ||||
| type SecurityScheme struct { | ||||
| 	VendorExtensible | ||||
| 	SecuritySchemeProps | ||||
| } | ||||
|  | ||||
| // JSONLookup implements an interface to customize json pointer lookup | ||||
| func (s SecurityScheme) JSONLookup(token string) (interface{}, error) { | ||||
| 	if ex, ok := s.Extensions[token]; ok { | ||||
| 		return &ex, nil | ||||
| 	} | ||||
|  | ||||
| 	r, _, err := jsonpointer.GetForToken(s.SecuritySchemeProps, token) | ||||
| 	return r, err | ||||
| } | ||||
|  | ||||
| // MarshalJSON marshal this to JSON | ||||
| func (s SecurityScheme) MarshalJSON() ([]byte, error) { | ||||
| 	b1, err := json.Marshal(s.SecuritySchemeProps) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	b2, err := json.Marshal(s.VendorExtensible) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return swag.ConcatJSON(b1, b2), nil | ||||
| } | ||||
|  | ||||
| // UnmarshalJSON marshal this from JSON | ||||
| func (s *SecurityScheme) UnmarshalJSON(data []byte) error { | ||||
| 	if err := json.Unmarshal(data, &s.SecuritySchemeProps); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return json.Unmarshal(data, &s.VendorExtensible) | ||||
| } | ||||
							
								
								
									
										86
									
								
								vendor/github.com/go-openapi/spec/spec.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								vendor/github.com/go-openapi/spec/spec.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,86 @@ | ||||
| // Copyright 2015 go-swagger maintainers | ||||
| // | ||||
| // 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 spec | ||||
|  | ||||
| import "encoding/json" | ||||
|  | ||||
| //go:generate curl -L --progress -o ./schemas/v2/schema.json http://swagger.io/v2/schema.json | ||||
| //go:generate curl -L --progress  -o ./schemas/jsonschema-draft-04.json http://json-schema.org/draft-04/schema | ||||
| //go:generate go-bindata -pkg=spec -prefix=./schemas -ignore=.*\.md ./schemas/... | ||||
| //go:generate perl -pi -e s,Json,JSON,g bindata.go | ||||
|  | ||||
| const ( | ||||
| 	// SwaggerSchemaURL the url for the swagger 2.0 schema to validate specs | ||||
| 	SwaggerSchemaURL = "http://swagger.io/v2/schema.json#" | ||||
| 	// JSONSchemaURL the url for the json schema schema | ||||
| 	JSONSchemaURL = "http://json-schema.org/draft-04/schema#" | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	jsonSchema    *Schema | ||||
| 	swaggerSchema *Schema | ||||
| ) | ||||
|  | ||||
| func init() { | ||||
| 	jsonSchema = MustLoadJSONSchemaDraft04() | ||||
| 	swaggerSchema = MustLoadSwagger20Schema() | ||||
| } | ||||
|  | ||||
| // MustLoadJSONSchemaDraft04 panics when Swagger20Schema returns an error | ||||
| func MustLoadJSONSchemaDraft04() *Schema { | ||||
| 	d, e := JSONSchemaDraft04() | ||||
| 	if e != nil { | ||||
| 		panic(e) | ||||
| 	} | ||||
| 	return d | ||||
| } | ||||
|  | ||||
| // JSONSchemaDraft04 loads the json schema document for json shema draft04 | ||||
| func JSONSchemaDraft04() (*Schema, error) { | ||||
| 	b, err := Asset("jsonschema-draft-04.json") | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	schema := new(Schema) | ||||
| 	if err := json.Unmarshal(b, schema); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return schema, nil | ||||
| } | ||||
|  | ||||
| // MustLoadSwagger20Schema panics when Swagger20Schema returns an error | ||||
| func MustLoadSwagger20Schema() *Schema { | ||||
| 	d, e := Swagger20Schema() | ||||
| 	if e != nil { | ||||
| 		panic(e) | ||||
| 	} | ||||
| 	return d | ||||
| } | ||||
|  | ||||
| // Swagger20Schema loads the swagger 2.0 schema from the embedded assets | ||||
| func Swagger20Schema() (*Schema, error) { | ||||
|  | ||||
| 	b, err := Asset("v2/schema.json") | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	schema := new(Schema) | ||||
| 	if err := json.Unmarshal(b, schema); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return schema, nil | ||||
| } | ||||
							
								
								
									
										324
									
								
								vendor/github.com/go-openapi/spec/swagger.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										324
									
								
								vendor/github.com/go-openapi/spec/swagger.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,324 @@ | ||||
| // Copyright 2015 go-swagger maintainers | ||||
| // | ||||
| // 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 spec | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"strconv" | ||||
|  | ||||
| 	"github.com/go-openapi/jsonpointer" | ||||
| 	"github.com/go-openapi/swag" | ||||
| ) | ||||
|  | ||||
| // Swagger this is the root document object for the API specification. | ||||
| // It combines what previously was the Resource Listing and API Declaration (version 1.2 and earlier) | ||||
| // together into one document. | ||||
| // | ||||
| // For more information: http://goo.gl/8us55a#swagger-object- | ||||
| type Swagger struct { | ||||
| 	VendorExtensible | ||||
| 	SwaggerProps | ||||
| } | ||||
|  | ||||
| // JSONLookup look up a value by the json property name | ||||
| func (s Swagger) JSONLookup(token string) (interface{}, error) { | ||||
| 	if ex, ok := s.Extensions[token]; ok { | ||||
| 		return &ex, nil | ||||
| 	} | ||||
| 	r, _, err := jsonpointer.GetForToken(s.SwaggerProps, token) | ||||
| 	return r, err | ||||
| } | ||||
|  | ||||
| // MarshalJSON marshals this swagger structure to json | ||||
| func (s Swagger) MarshalJSON() ([]byte, error) { | ||||
| 	b1, err := json.Marshal(s.SwaggerProps) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	b2, err := json.Marshal(s.VendorExtensible) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return swag.ConcatJSON(b1, b2), nil | ||||
| } | ||||
|  | ||||
| // UnmarshalJSON unmarshals a swagger spec from json | ||||
| func (s *Swagger) UnmarshalJSON(data []byte) error { | ||||
| 	var sw Swagger | ||||
| 	if err := json.Unmarshal(data, &sw.SwaggerProps); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if err := json.Unmarshal(data, &sw.VendorExtensible); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	*s = sw | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // SwaggerProps captures the top-level properties of an Api specification | ||||
| // | ||||
| // NOTE: validation rules | ||||
| // - the scheme, when present must be from [http, https, ws, wss] | ||||
| // - BasePath must start with a leading "/" | ||||
| // - Paths is required | ||||
| type SwaggerProps struct { | ||||
| 	ID                  string                 `json:"id,omitempty"` | ||||
| 	Consumes            []string               `json:"consumes,omitempty"` | ||||
| 	Produces            []string               `json:"produces,omitempty"` | ||||
| 	Schemes             []string               `json:"schemes,omitempty"` | ||||
| 	Swagger             string                 `json:"swagger,omitempty"` | ||||
| 	Info                *Info                  `json:"info,omitempty"` | ||||
| 	Host                string                 `json:"host,omitempty"` | ||||
| 	BasePath            string                 `json:"basePath,omitempty"` | ||||
| 	Paths               *Paths                 `json:"paths"` | ||||
| 	Definitions         Definitions            `json:"definitions,omitempty"` | ||||
| 	Parameters          map[string]Parameter   `json:"parameters,omitempty"` | ||||
| 	Responses           map[string]Response    `json:"responses,omitempty"` | ||||
| 	SecurityDefinitions SecurityDefinitions    `json:"securityDefinitions,omitempty"` | ||||
| 	Security            []map[string][]string  `json:"security,omitempty"` | ||||
| 	Tags                []Tag                  `json:"tags,omitempty"` | ||||
| 	ExternalDocs        *ExternalDocumentation `json:"externalDocs,omitempty"` | ||||
| } | ||||
|  | ||||
| // Dependencies represent a dependencies property | ||||
| type Dependencies map[string]SchemaOrStringArray | ||||
|  | ||||
| // SchemaOrBool represents a schema or boolean value, is biased towards true for the boolean property | ||||
| type SchemaOrBool struct { | ||||
| 	Allows bool | ||||
| 	Schema *Schema | ||||
| } | ||||
|  | ||||
| // JSONLookup implements an interface to customize json pointer lookup | ||||
| func (s SchemaOrBool) JSONLookup(token string) (interface{}, error) { | ||||
| 	if token == "allows" { | ||||
| 		return s.Allows, nil | ||||
| 	} | ||||
| 	r, _, err := jsonpointer.GetForToken(s.Schema, token) | ||||
| 	return r, err | ||||
| } | ||||
|  | ||||
| var jsTrue = []byte("true") | ||||
| var jsFalse = []byte("false") | ||||
|  | ||||
| // MarshalJSON convert this object to JSON | ||||
| func (s SchemaOrBool) MarshalJSON() ([]byte, error) { | ||||
| 	if s.Schema != nil { | ||||
| 		return json.Marshal(s.Schema) | ||||
| 	} | ||||
|  | ||||
| 	if s.Schema == nil && !s.Allows { | ||||
| 		return jsFalse, nil | ||||
| 	} | ||||
| 	return jsTrue, nil | ||||
| } | ||||
|  | ||||
| // UnmarshalJSON converts this bool or schema object from a JSON structure | ||||
| func (s *SchemaOrBool) UnmarshalJSON(data []byte) error { | ||||
| 	var nw SchemaOrBool | ||||
| 	if len(data) >= 4 { | ||||
| 		if data[0] == '{' { | ||||
| 			var sch Schema | ||||
| 			if err := json.Unmarshal(data, &sch); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			nw.Schema = &sch | ||||
| 		} | ||||
| 		nw.Allows = !(data[0] == 'f' && data[1] == 'a' && data[2] == 'l' && data[3] == 's' && data[4] == 'e') | ||||
| 	} | ||||
| 	*s = nw | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // SchemaOrStringArray represents a schema or a string array | ||||
| type SchemaOrStringArray struct { | ||||
| 	Schema   *Schema | ||||
| 	Property []string | ||||
| } | ||||
|  | ||||
| // JSONLookup implements an interface to customize json pointer lookup | ||||
| func (s SchemaOrStringArray) JSONLookup(token string) (interface{}, error) { | ||||
| 	r, _, err := jsonpointer.GetForToken(s.Schema, token) | ||||
| 	return r, err | ||||
| } | ||||
|  | ||||
| // MarshalJSON converts this schema object or array into JSON structure | ||||
| func (s SchemaOrStringArray) MarshalJSON() ([]byte, error) { | ||||
| 	if len(s.Property) > 0 { | ||||
| 		return json.Marshal(s.Property) | ||||
| 	} | ||||
| 	if s.Schema != nil { | ||||
| 		return json.Marshal(s.Schema) | ||||
| 	} | ||||
| 	return []byte("null"), nil | ||||
| } | ||||
|  | ||||
| // UnmarshalJSON converts this schema object or array from a JSON structure | ||||
| func (s *SchemaOrStringArray) UnmarshalJSON(data []byte) error { | ||||
| 	var first byte | ||||
| 	if len(data) > 1 { | ||||
| 		first = data[0] | ||||
| 	} | ||||
| 	var nw SchemaOrStringArray | ||||
| 	if first == '{' { | ||||
| 		var sch Schema | ||||
| 		if err := json.Unmarshal(data, &sch); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		nw.Schema = &sch | ||||
| 	} | ||||
| 	if first == '[' { | ||||
| 		if err := json.Unmarshal(data, &nw.Property); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 	*s = nw | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Definitions contains the models explicitly defined in this spec | ||||
| // An object to hold data types that can be consumed and produced by operations. | ||||
| // These data types can be primitives, arrays or models. | ||||
| // | ||||
| // For more information: http://goo.gl/8us55a#definitionsObject | ||||
| type Definitions map[string]Schema | ||||
|  | ||||
| // SecurityDefinitions a declaration of the security schemes available to be used in the specification. | ||||
| // This does not enforce the security schemes on the operations and only serves to provide | ||||
| // the relevant details for each scheme. | ||||
| // | ||||
| // For more information: http://goo.gl/8us55a#securityDefinitionsObject | ||||
| type SecurityDefinitions map[string]*SecurityScheme | ||||
|  | ||||
| // StringOrArray represents a value that can either be a string | ||||
| // or an array of strings. Mainly here for serialization purposes | ||||
| type StringOrArray []string | ||||
|  | ||||
| // Contains returns true when the value is contained in the slice | ||||
| func (s StringOrArray) Contains(value string) bool { | ||||
| 	for _, str := range s { | ||||
| 		if str == value { | ||||
| 			return true | ||||
| 		} | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| // JSONLookup implements an interface to customize json pointer lookup | ||||
| func (s SchemaOrArray) JSONLookup(token string) (interface{}, error) { | ||||
| 	if _, err := strconv.Atoi(token); err == nil { | ||||
| 		r, _, err := jsonpointer.GetForToken(s.Schemas, token) | ||||
| 		return r, err | ||||
| 	} | ||||
| 	r, _, err := jsonpointer.GetForToken(s.Schema, token) | ||||
| 	return r, err | ||||
| } | ||||
|  | ||||
| // UnmarshalJSON unmarshals this string or array object from a JSON array or JSON string | ||||
| func (s *StringOrArray) UnmarshalJSON(data []byte) error { | ||||
| 	var first byte | ||||
| 	if len(data) > 1 { | ||||
| 		first = data[0] | ||||
| 	} | ||||
|  | ||||
| 	if first == '[' { | ||||
| 		var parsed []string | ||||
| 		if err := json.Unmarshal(data, &parsed); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		*s = StringOrArray(parsed) | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	var single interface{} | ||||
| 	if err := json.Unmarshal(data, &single); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if single == nil { | ||||
| 		return nil | ||||
| 	} | ||||
| 	switch v := single.(type) { | ||||
| 	case string: | ||||
| 		*s = StringOrArray([]string{v}) | ||||
| 		return nil | ||||
| 	default: | ||||
| 		return fmt.Errorf("only string or array is allowed, not %T", single) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // MarshalJSON converts this string or array to a JSON array or JSON string | ||||
| func (s StringOrArray) MarshalJSON() ([]byte, error) { | ||||
| 	if len(s) == 1 { | ||||
| 		return json.Marshal([]string(s)[0]) | ||||
| 	} | ||||
| 	return json.Marshal([]string(s)) | ||||
| } | ||||
|  | ||||
| // SchemaOrArray represents a value that can either be a Schema | ||||
| // or an array of Schema. Mainly here for serialization purposes | ||||
| type SchemaOrArray struct { | ||||
| 	Schema  *Schema | ||||
| 	Schemas []Schema | ||||
| } | ||||
|  | ||||
| // Len returns the number of schemas in this property | ||||
| func (s SchemaOrArray) Len() int { | ||||
| 	if s.Schema != nil { | ||||
| 		return 1 | ||||
| 	} | ||||
| 	return len(s.Schemas) | ||||
| } | ||||
|  | ||||
| // ContainsType returns true when one of the schemas is of the specified type | ||||
| func (s *SchemaOrArray) ContainsType(name string) bool { | ||||
| 	if s.Schema != nil { | ||||
| 		return s.Schema.Type != nil && s.Schema.Type.Contains(name) | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| // MarshalJSON converts this schema object or array into JSON structure | ||||
| func (s SchemaOrArray) MarshalJSON() ([]byte, error) { | ||||
| 	if len(s.Schemas) > 0 { | ||||
| 		return json.Marshal(s.Schemas) | ||||
| 	} | ||||
| 	return json.Marshal(s.Schema) | ||||
| } | ||||
|  | ||||
| // UnmarshalJSON converts this schema object or array from a JSON structure | ||||
| func (s *SchemaOrArray) UnmarshalJSON(data []byte) error { | ||||
| 	var nw SchemaOrArray | ||||
| 	var first byte | ||||
| 	if len(data) > 1 { | ||||
| 		first = data[0] | ||||
| 	} | ||||
| 	if first == '{' { | ||||
| 		var sch Schema | ||||
| 		if err := json.Unmarshal(data, &sch); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		nw.Schema = &sch | ||||
| 	} | ||||
| 	if first == '[' { | ||||
| 		if err := json.Unmarshal(data, &nw.Schemas); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 	*s = nw | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // vim:set ft=go noet sts=2 sw=2 ts=2: | ||||
							
								
								
									
										75
									
								
								vendor/github.com/go-openapi/spec/tag.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								vendor/github.com/go-openapi/spec/tag.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,75 @@ | ||||
| // Copyright 2015 go-swagger maintainers | ||||
| // | ||||
| // 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 spec | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
|  | ||||
| 	"github.com/go-openapi/jsonpointer" | ||||
| 	"github.com/go-openapi/swag" | ||||
| ) | ||||
|  | ||||
| // TagProps describe a tag entry in the top level tags section of a swagger spec | ||||
| type TagProps struct { | ||||
| 	Description  string                 `json:"description,omitempty"` | ||||
| 	Name         string                 `json:"name,omitempty"` | ||||
| 	ExternalDocs *ExternalDocumentation `json:"externalDocs,omitempty"` | ||||
| } | ||||
|  | ||||
| // NewTag creates a new tag | ||||
| func NewTag(name, description string, externalDocs *ExternalDocumentation) Tag { | ||||
| 	return Tag{TagProps: TagProps{Description: description, Name: name, ExternalDocs: externalDocs}} | ||||
| } | ||||
|  | ||||
| // Tag allows adding meta data to a single tag that is used by the | ||||
| // [Operation Object](http://goo.gl/8us55a#operationObject). | ||||
| // It is not mandatory to have a Tag Object per tag used there. | ||||
| // | ||||
| // For more information: http://goo.gl/8us55a#tagObject | ||||
| type Tag struct { | ||||
| 	VendorExtensible | ||||
| 	TagProps | ||||
| } | ||||
|  | ||||
| // JSONLookup implements an interface to customize json pointer lookup | ||||
| func (t Tag) JSONLookup(token string) (interface{}, error) { | ||||
| 	if ex, ok := t.Extensions[token]; ok { | ||||
| 		return &ex, nil | ||||
| 	} | ||||
|  | ||||
| 	r, _, err := jsonpointer.GetForToken(t.TagProps, token) | ||||
| 	return r, err | ||||
| } | ||||
|  | ||||
| // MarshalJSON marshal this to JSON | ||||
| func (t Tag) MarshalJSON() ([]byte, error) { | ||||
| 	b1, err := json.Marshal(t.TagProps) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	b2, err := json.Marshal(t.VendorExtensible) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return swag.ConcatJSON(b1, b2), nil | ||||
| } | ||||
|  | ||||
| // UnmarshalJSON marshal this from JSON | ||||
| func (t *Tag) UnmarshalJSON(data []byte) error { | ||||
| 	if err := json.Unmarshal(data, &t.TagProps); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return json.Unmarshal(data, &t.VendorExtensible) | ||||
| } | ||||
							
								
								
									
										174
									
								
								vendor/github.com/go-openapi/spec/unused.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										174
									
								
								vendor/github.com/go-openapi/spec/unused.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,174 @@ | ||||
| // Copyright 2015 go-swagger maintainers | ||||
| // | ||||
| // 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 spec | ||||
|  | ||||
| /* | ||||
|  | ||||
| import ( | ||||
| 	"net/url" | ||||
| 	"os" | ||||
| 	"path" | ||||
| 	"path/filepath" | ||||
|  | ||||
| 	"github.com/go-openapi/jsonpointer" | ||||
| ) | ||||
|  | ||||
|   // Some currently unused functions and definitions that | ||||
|   // used to be part of the expander. | ||||
|  | ||||
|   // Moved here for the record and possible future reuse | ||||
|  | ||||
| var ( | ||||
| 	idPtr, _  = jsonpointer.New("/id") | ||||
| 	refPtr, _ = jsonpointer.New("/$ref") | ||||
| ) | ||||
|  | ||||
| func idFromNode(node interface{}) (*Ref, error) { | ||||
| 	if idValue, _, err := idPtr.Get(node); err == nil { | ||||
| 		if refStr, ok := idValue.(string); ok && refStr != "" { | ||||
| 			idRef, err := NewRef(refStr) | ||||
| 			if err != nil { | ||||
| 				return nil, err | ||||
| 			} | ||||
| 			return &idRef, nil | ||||
| 		} | ||||
| 	} | ||||
| 	return nil, nil | ||||
| } | ||||
|  | ||||
| func nextRef(startingNode interface{}, startingRef *Ref, ptr *jsonpointer.Pointer) *Ref { | ||||
| 	if startingRef == nil { | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	if ptr == nil { | ||||
| 		return startingRef | ||||
| 	} | ||||
|  | ||||
| 	ret := startingRef | ||||
| 	var idRef *Ref | ||||
| 	node := startingNode | ||||
|  | ||||
| 	for _, tok := range ptr.DecodedTokens() { | ||||
| 		node, _, _ = jsonpointer.GetForToken(node, tok) | ||||
| 		if node == nil { | ||||
| 			break | ||||
| 		} | ||||
|  | ||||
| 		idRef, _ = idFromNode(node) | ||||
| 		if idRef != nil { | ||||
| 			nw, err := ret.Inherits(*idRef) | ||||
| 			if err != nil { | ||||
| 				break | ||||
| 			} | ||||
| 			ret = nw | ||||
| 		} | ||||
|  | ||||
| 		refRef, _, _ := refPtr.Get(node) | ||||
| 		if refRef != nil { | ||||
| 			var rf Ref | ||||
| 			switch value := refRef.(type) { | ||||
| 			case string: | ||||
| 				rf, _ = NewRef(value) | ||||
| 			} | ||||
| 			nw, err := ret.Inherits(rf) | ||||
| 			if err != nil { | ||||
| 				break | ||||
| 			} | ||||
| 			nwURL := nw.GetURL() | ||||
| 			if nwURL.Scheme == "file" || (nwURL.Scheme == "" && nwURL.Host == "") { | ||||
| 				nwpt := filepath.ToSlash(nwURL.Path) | ||||
| 				if filepath.IsAbs(nwpt) { | ||||
| 					_, err := os.Stat(nwpt) | ||||
| 					if err != nil { | ||||
| 						nwURL.Path = filepath.Join(".", nwpt) | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			ret = nw | ||||
| 		} | ||||
|  | ||||
| 	} | ||||
|  | ||||
| 	return ret | ||||
| } | ||||
|  | ||||
| // basePathFromSchemaID returns a new basePath based on an existing basePath and a schema ID | ||||
| func basePathFromSchemaID(oldBasePath, id string) string { | ||||
| 	u, err := url.Parse(oldBasePath) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	uid, err := url.Parse(id) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
|  | ||||
| 	if path.IsAbs(uid.Path) { | ||||
| 		return id | ||||
| 	} | ||||
| 	u.Path = path.Join(path.Dir(u.Path), uid.Path) | ||||
| 	return u.String() | ||||
| } | ||||
| */ | ||||
|  | ||||
| // type ExtraSchemaProps map[string]interface{} | ||||
|  | ||||
| // // JSONSchema represents a structure that is a json schema draft 04 | ||||
| // type JSONSchema struct { | ||||
| // 	SchemaProps | ||||
| // 	ExtraSchemaProps | ||||
| // } | ||||
|  | ||||
| // // MarshalJSON marshal this to JSON | ||||
| // func (s JSONSchema) MarshalJSON() ([]byte, error) { | ||||
| // 	b1, err := json.Marshal(s.SchemaProps) | ||||
| // 	if err != nil { | ||||
| // 		return nil, err | ||||
| // 	} | ||||
| // 	b2, err := s.Ref.MarshalJSON() | ||||
| // 	if err != nil { | ||||
| // 		return nil, err | ||||
| // 	} | ||||
| // 	b3, err := s.Schema.MarshalJSON() | ||||
| // 	if err != nil { | ||||
| // 		return nil, err | ||||
| // 	} | ||||
| // 	b4, err := json.Marshal(s.ExtraSchemaProps) | ||||
| // 	if err != nil { | ||||
| // 		return nil, err | ||||
| // 	} | ||||
| // 	return swag.ConcatJSON(b1, b2, b3, b4), nil | ||||
| // } | ||||
|  | ||||
| // // UnmarshalJSON marshal this from JSON | ||||
| // func (s *JSONSchema) UnmarshalJSON(data []byte) error { | ||||
| // 	var sch JSONSchema | ||||
| // 	if err := json.Unmarshal(data, &sch.SchemaProps); err != nil { | ||||
| // 		return err | ||||
| // 	} | ||||
| // 	if err := json.Unmarshal(data, &sch.Ref); err != nil { | ||||
| // 		return err | ||||
| // 	} | ||||
| // 	if err := json.Unmarshal(data, &sch.Schema); err != nil { | ||||
| // 		return err | ||||
| // 	} | ||||
| // 	if err := json.Unmarshal(data, &sch.ExtraSchemaProps); err != nil { | ||||
| // 		return err | ||||
| // 	} | ||||
| // 	*s = sch | ||||
| // 	return nil | ||||
| // } | ||||
							
								
								
									
										68
									
								
								vendor/github.com/go-openapi/spec/xml_object.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								vendor/github.com/go-openapi/spec/xml_object.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | ||||
| // Copyright 2015 go-swagger maintainers | ||||
| // | ||||
| // 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 spec | ||||
|  | ||||
| // XMLObject a metadata object that allows for more fine-tuned XML model definitions. | ||||
| // | ||||
| // For more information: http://goo.gl/8us55a#xmlObject | ||||
| type XMLObject struct { | ||||
| 	Name      string `json:"name,omitempty"` | ||||
| 	Namespace string `json:"namespace,omitempty"` | ||||
| 	Prefix    string `json:"prefix,omitempty"` | ||||
| 	Attribute bool   `json:"attribute,omitempty"` | ||||
| 	Wrapped   bool   `json:"wrapped,omitempty"` | ||||
| } | ||||
|  | ||||
| // WithName sets the xml name for the object | ||||
| func (x *XMLObject) WithName(name string) *XMLObject { | ||||
| 	x.Name = name | ||||
| 	return x | ||||
| } | ||||
|  | ||||
| // WithNamespace sets the xml namespace for the object | ||||
| func (x *XMLObject) WithNamespace(namespace string) *XMLObject { | ||||
| 	x.Namespace = namespace | ||||
| 	return x | ||||
| } | ||||
|  | ||||
| // WithPrefix sets the xml prefix for the object | ||||
| func (x *XMLObject) WithPrefix(prefix string) *XMLObject { | ||||
| 	x.Prefix = prefix | ||||
| 	return x | ||||
| } | ||||
|  | ||||
| // AsAttribute flags this object as xml attribute | ||||
| func (x *XMLObject) AsAttribute() *XMLObject { | ||||
| 	x.Attribute = true | ||||
| 	return x | ||||
| } | ||||
|  | ||||
| // AsElement flags this object as an xml node | ||||
| func (x *XMLObject) AsElement() *XMLObject { | ||||
| 	x.Attribute = false | ||||
| 	return x | ||||
| } | ||||
|  | ||||
| // AsWrapped flags this object as wrapped, this is mostly useful for array types | ||||
| func (x *XMLObject) AsWrapped() *XMLObject { | ||||
| 	x.Wrapped = true | ||||
| 	return x | ||||
| } | ||||
|  | ||||
| // AsUnwrapped flags this object as an xml node | ||||
| func (x *XMLObject) AsUnwrapped() *XMLObject { | ||||
| 	x.Wrapped = false | ||||
| 	return x | ||||
| } | ||||
		Reference in New Issue
	
	Block a user