1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
package openapi3
import (
"context"
"fmt"
"github.com/getkin/kin-openapi/jsoninfo"
)
type PathItem struct {
ExtensionProps
Summary string `json:"summary,omitempty"`
Description string `json:"description,omitempty"`
Connect *Operation `json:"connect,omitempty"`
Delete *Operation `json:"delete,omitempty"`
Get *Operation `json:"get,omitempty"`
Head *Operation `json:"head,omitempty"`
Options *Operation `json:"options,omitempty"`
Patch *Operation `json:"patch,omitempty"`
Post *Operation `json:"post,omitempty"`
Put *Operation `json:"put,omitempty"`
Trace *Operation `json:"trace,omitempty"`
Servers Servers `json:"servers,omitempty"`
Parameters Parameters `json:"parameters,omitempty"`
}
func (pathItem *PathItem) MarshalJSON() ([]byte, error) {
return jsoninfo.MarshalStrictStruct(pathItem)
}
func (pathItem *PathItem) UnmarshalJSON(data []byte) error {
return jsoninfo.UnmarshalStrictStruct(data, pathItem)
}
func (pathItem *PathItem) Operations() map[string]*Operation {
operations := make(map[string]*Operation, 4)
if v := pathItem.Connect; v != nil {
operations["CONNECT"] = v
}
if v := pathItem.Delete; v != nil {
operations["DELETE"] = v
}
if v := pathItem.Get; v != nil {
operations["GET"] = v
}
if v := pathItem.Head; v != nil {
operations["HEAD"] = v
}
if v := pathItem.Options; v != nil {
operations["OPTIONS"] = v
}
if v := pathItem.Patch; v != nil {
operations["PATCH"] = v
}
if v := pathItem.Post; v != nil {
operations["POST"] = v
}
if v := pathItem.Put; v != nil {
operations["PUT"] = v
}
if v := pathItem.Trace; v != nil {
operations["TRACE"] = v
}
return operations
}
func (pathItem *PathItem) GetOperation(method string) *Operation {
switch method {
case "CONNECT":
return pathItem.Connect
case "DELETE":
return pathItem.Delete
case "GET":
return pathItem.Get
case "HEAD":
return pathItem.Head
case "OPTIONS":
return pathItem.Options
case "PATCH":
return pathItem.Patch
case "POST":
return pathItem.Post
case "PUT":
return pathItem.Put
case "TRACE":
return pathItem.Trace
default:
panic(fmt.Errorf("Unsupported HTTP method '%s'", method))
}
}
func (pathItem *PathItem) SetOperation(method string, operation *Operation) {
switch method {
case "CONNECT":
pathItem.Connect = operation
case "DELETE":
pathItem.Delete = operation
case "GET":
pathItem.Get = operation
case "HEAD":
pathItem.Head = operation
case "OPTIONS":
pathItem.Options = operation
case "PATCH":
pathItem.Patch = operation
case "POST":
pathItem.Post = operation
case "PUT":
pathItem.Put = operation
case "TRACE":
pathItem.Trace = operation
default:
panic(fmt.Errorf("Unsupported HTTP method '%s'", method))
}
}
func (pathItem *PathItem) Validate(c context.Context) error {
for _, operation := range pathItem.Operations() {
if err := operation.Validate(c); err != nil {
return err
}
}
return nil
}
|