@@ -3,49 +3,51 @@ package openapi2
33import (
44 "net/http"
55 "strings"
6+
7+ "github.com/qdm12/reprint"
68)
79
810func CopyEndpointsByTag (tag string , specOld , specNew Specification ) (Specification , error ) {
911 var err error
1012 for url , path := range specOld .Paths {
1113 if path .Delete != nil {
12- specNew , err = copyOrIgnoreEndpoint (http .MethodDelete , * path .Delete , url , path , tag , specOld , specNew )
14+ specNew , err = copyOrIgnoreEndpoint (http .MethodDelete , * path .Delete , url , path , tag , specNew )
1315 if err != nil {
1416 return specNew , err
1517 }
1618 }
1719 if path .Get != nil {
18- specNew , err = copyOrIgnoreEndpoint (http .MethodGet , * path .Get , url , path , tag , specOld , specNew )
20+ specNew , err = copyOrIgnoreEndpoint (http .MethodGet , * path .Get , url , path , tag , specNew )
1921 if err != nil {
2022 return specNew , err
2123 }
2224 }
2325 if path .Head != nil {
24- specNew , err = copyOrIgnoreEndpoint (http .MethodHead , * path .Head , url , path , tag , specOld , specNew )
26+ specNew , err = copyOrIgnoreEndpoint (http .MethodHead , * path .Head , url , path , tag , specNew )
2527 if err != nil {
2628 return specNew , err
2729 }
2830 }
2931 if path .Options != nil {
30- specNew , err = copyOrIgnoreEndpoint (http .MethodOptions , * path .Options , url , path , tag , specOld , specNew )
32+ specNew , err = copyOrIgnoreEndpoint (http .MethodOptions , * path .Options , url , path , tag , specNew )
3133 if err != nil {
3234 return specNew , err
3335 }
3436 }
3537 if path .Patch != nil {
36- specNew , err = copyOrIgnoreEndpoint (http .MethodPatch , * path .Patch , url , path , tag , specOld , specNew )
38+ specNew , err = copyOrIgnoreEndpoint (http .MethodPatch , * path .Patch , url , path , tag , specNew )
3739 if err != nil {
3840 return specNew , err
3941 }
4042 }
4143 if path .Post != nil {
42- specNew , err = copyOrIgnoreEndpoint (http .MethodPost , * path .Post , url , path , tag , specOld , specNew )
44+ specNew , err = copyOrIgnoreEndpoint (http .MethodPost , * path .Post , url , path , tag , specNew )
4345 if err != nil {
4446 return specNew , err
4547 }
4648 }
4749 if path .Put != nil {
48- specNew , err = copyOrIgnoreEndpoint (http .MethodPut , * path .Put , url , path , tag , specOld , specNew )
50+ specNew , err = copyOrIgnoreEndpoint (http .MethodPut , * path .Put , url , path , tag , specNew )
4951 if err != nil {
5052 return specNew , err
5153 }
@@ -54,7 +56,8 @@ func CopyEndpointsByTag(tag string, specOld, specNew Specification) (Specificati
5456 return specNew , nil
5557}
5658
57- func copyOrIgnoreEndpoint (method string , endpoint Endpoint , url string , path Path , wantTag string , specOld , specNew Specification ) (Specification , error ) {
59+ func copyOrIgnoreEndpoint (method string , endpoint Endpoint , url string , path Path , wantTag string , specNew Specification ) (Specification , error ) {
60+ // TODO: copy referenced objects, e.g. schema objects, which may need `specOld`.
5861 wantTag = strings .TrimSpace (wantTag )
5962 if len (wantTag ) != 0 {
6063 match := false
@@ -67,10 +70,11 @@ func copyOrIgnoreEndpoint(method string, endpoint Endpoint, url string, path Pat
6770 return specNew , nil
6871 }
6972 }
70- pathNew , ok := specNew .Paths [url ]
71- if ! ok {
72- pathNew = Path {}
73+ if _ , ok := specNew .Paths [url ]; ok {
74+ return specNew , nil
7375 }
76+
77+ pathNew := reprint .This (path ).(Path ) // ref: https://stackoverflow.com/a/77412997/1908967
7478 err := pathNew .SetEndpoint (method , endpoint )
7579 if err != nil {
7680 return specNew , err
0 commit comments