Skip to content

Commit a8e1514

Browse files
authored
Merge pull request #7 from up9inc/extensions-key-sorted
Fix operation extensions are not sorted regularly
2 parents 6172e11 + 0afd043 commit a8e1514

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

extension.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package openapi
22

33
import (
44
"encoding/json"
5+
"sort"
56
"strings"
67

78
"github.com/tidwall/sjson"
@@ -134,8 +135,16 @@ func marshalExtendedJSON(dst extended) ([]byte, error) {
134135

135136
func marshalExtendedJSONInto(data []byte, obj extended) ([]byte, error) {
136137
var err error
137-
for k, v := range obj.exts() {
138-
data, err = sjson.SetBytes(data, k, v)
138+
139+
exts := obj.exts()
140+
keys := make([]string, 0, len(exts))
141+
for k := range exts {
142+
keys = append(keys, k)
143+
}
144+
sort.Strings(keys)
145+
146+
for _, k := range keys {
147+
data, err = sjson.SetBytes(data, k, exts[k])
139148
if err != nil {
140149
return data, err
141150
}

operation_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package openapi_test
33
import (
44
"encoding/json"
55
"fmt"
6+
"strconv"
67
"testing"
78

89
"github.com/chanced/cmpjson"
@@ -104,3 +105,18 @@ func TestOperation(t *testing.T) {
104105

105106
}
106107
}
108+
109+
func TestExtensionSorting(t *testing.T) {
110+
assert := require.New(t)
111+
exp := `{"x-key1":1,"x-key2":2}`
112+
for n := 0; n < 100; n++ {
113+
op := new(openapi.Operation)
114+
op.Extensions = make(openapi.Extensions)
115+
op.Extensions.SetEncodedExtension("key1", []byte("1"))
116+
op.Extensions.SetEncodedExtension("key2", []byte("2"))
117+
118+
marshaled, _ := json.Marshal(op)
119+
120+
assert.Equal(string(marshaled), exp, strconv.Itoa(n))
121+
}
122+
}

0 commit comments

Comments
 (0)