-
Notifications
You must be signed in to change notification settings - Fork 28
/
delete.go
92 lines (86 loc) · 2.76 KB
/
delete.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package openapi3edit
import (
"net/http"
oas3 "github.com/getkin/kin-openapi/openapi3"
"github.com/grokify/simplego/net/urlutil"
)
func SpecDeleteProperties(spec *oas3.Swagger, md SpecMetadata) {
for _, opID := range md.OperationIDs {
SpecDeleteOperations(spec,
func(urlpath, method string, op *oas3.Operation) bool {
if op != nil && op.OperationID == opID {
return true
}
return false
})
}
for _, epDel := range md.Endpoints {
SpecDeleteOperations(spec,
func(urlpath, method string, op *oas3.Operation) bool {
if op == nil {
return false
}
if epDel == urlutil.EndpointString(urlpath, method, false) ||
epDel == urlutil.EndpointString(urlpath, method, true) {
return true
}
return false
})
}
for _, schemaNameDel := range md.SchemaNames {
for schemaNameTry := range spec.Components.Schemas {
if schemaNameDel == schemaNameTry {
delete(spec.Components.Schemas, schemaNameTry)
}
}
}
}
func SpecDeleteOperations(spec *oas3.Swagger, delThis func(urlpath, method string, op *oas3.Operation) bool) {
newPaths := oas3.Paths{}
for urlpath, pathItem := range spec.Paths {
newPathItem := oas3.PathItem{
ExtensionProps: pathItem.ExtensionProps,
Ref: pathItem.Ref,
Summary: pathItem.Summary,
Description: pathItem.Description,
Servers: pathItem.Servers,
Parameters: pathItem.Parameters}
if pathItem.Connect != nil && !delThis(urlpath, http.MethodConnect, pathItem.Connect) {
newPathItem.Connect = pathItem.Connect
}
if pathItem.Delete != nil && !delThis(urlpath, http.MethodDelete, pathItem.Delete) {
newPathItem.Delete = pathItem.Delete
}
if pathItem.Get != nil && !delThis(urlpath, http.MethodGet, pathItem.Get) {
newPathItem.Get = pathItem.Get
}
if pathItem.Head != nil && !delThis(urlpath, http.MethodHead, pathItem.Head) {
newPathItem.Head = pathItem.Head
}
if pathItem.Patch != nil && !delThis(urlpath, http.MethodPatch, pathItem.Patch) {
newPathItem.Patch = pathItem.Patch
}
if pathItem.Post != nil && !delThis(urlpath, http.MethodPost, pathItem.Post) {
newPathItem.Post = pathItem.Post
}
if pathItem.Put != nil && !delThis(urlpath, http.MethodPut, pathItem.Put) {
newPathItem.Put = pathItem.Put
}
if pathItem.Trace != nil && !delThis(urlpath, http.MethodTrace, pathItem.Trace) {
newPathItem.Trace = pathItem.Trace
}
if PathItemHasEndpoints(&newPathItem) {
newPaths[urlpath] = &newPathItem
}
}
spec.Paths = newPaths
}
func PathItemHasEndpoints(pathItem *oas3.PathItem) bool {
if pathItem.Connect != nil || pathItem.Delete != nil ||
pathItem.Get != nil || pathItem.Head != nil ||
pathItem.Patch != nil || pathItem.Post != nil ||
pathItem.Put != nil || pathItem.Trace != nil {
return true
}
return false
}