Skip to content

Commit 204e709

Browse files
committed
refactor json schema ref
1 parent 605ec3d commit 204e709

File tree

103 files changed

+1161
-1087
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

103 files changed

+1161
-1087
lines changed

api/handler_kafka_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
schematest2 "mokapi/providers/openapi/schema/schematest"
1313
"mokapi/runtime"
1414
"mokapi/runtime/monitor"
15-
"mokapi/schema/json/schematest"
15+
"mokapi/schema/json/schema/schematest"
1616
"mokapi/try"
1717
"net/http"
1818
"testing"

api/handler_schema.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,9 @@ func (h *handler) getExampleData(w http.ResponseWriter, r *http.Request) {
7474
case *schema.Ref:
7575
data, err = getRandomByOpenApi(re.Name, s, ct)
7676
case *avro.Schema:
77-
data, err = getRandomByJson(re.Name, &jsonSchema.Ref{Value: s.Convert()}, ct)
77+
data, err = getRandomByJson(re.Name, s.Convert(), ct)
7878
default:
79-
data, err = getRandomByJson(re.Name, s.(*jsonSchema.Ref), ct)
79+
data, err = getRandomByJson(re.Name, s.(*jsonSchema.Schema), ct)
8080
}
8181

8282
if err != nil {
@@ -103,7 +103,7 @@ func getRandomByOpenApi(name string, r *schema.Ref, ct media.ContentType) ([]byt
103103
return r.Marshal(data, ct)
104104
}
105105

106-
func getRandomByJson(name string, r *jsonSchema.Ref, ct media.ContentType) ([]byte, error) {
106+
func getRandomByJson(name string, r *jsonSchema.Schema, ct media.ContentType) ([]byte, error) {
107107
data, err := generator.New(&generator.Request{
108108
Path: generator.Path{
109109
&generator.PathElement{Name: name, Schema: r},
@@ -215,7 +215,7 @@ func unmarshal(raw json.RawMessage, format string) (interface{}, error) {
215215
err := json.Unmarshal(raw, &a)
216216
return a, err
217217
default:
218-
var r *jsonSchema.Ref
218+
var r *jsonSchema.Schema
219219
err := json.Unmarshal(raw, &r)
220220
return r, err
221221
}

api/handler_schema_test.go

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88
"mokapi/runtime"
99
"mokapi/runtime/monitor"
1010
avro "mokapi/schema/avro/schema"
11-
"mokapi/schema/json/ref"
1211
jsonSchema "mokapi/schema/json/schema"
1312
"mokapi/try"
1413
"net/http"
@@ -260,8 +259,8 @@ func TestSchemaInfo_UnmarshalJSON(t *testing.T) {
260259
test: func(t *testing.T, s *schemaInfo, err error) {
261260
require.NoError(t, err)
262261
require.NotNil(t, s.Schema)
263-
require.IsType(t, &jsonSchema.Ref{}, s.Schema)
264-
require.Equal(t, "object", s.Schema.(*jsonSchema.Ref).Value.Type[0])
262+
require.IsType(t, &jsonSchema.Schema{}, s.Schema)
263+
require.Equal(t, "object", s.Schema.(*jsonSchema.Schema).Type[0])
265264
},
266265
},
267266
{
@@ -271,8 +270,8 @@ func TestSchemaInfo_UnmarshalJSON(t *testing.T) {
271270
require.NoError(t, err)
272271
require.Equal(t, "foo", s.Format)
273272
require.NotNil(t, s.Schema)
274-
require.IsType(t, &jsonSchema.Ref{}, s.Schema)
275-
require.Equal(t, "object", s.Schema.(*jsonSchema.Ref).Value.Type[0])
273+
require.IsType(t, &jsonSchema.Schema{}, s.Schema)
274+
require.Equal(t, "object", s.Schema.(*jsonSchema.Schema).Type[0])
276275
},
277276
},
278277
}
@@ -314,21 +313,21 @@ func TestSchemaInfo_MarshalJSON(t *testing.T) {
314313
},
315314
{
316315
name: "json schema only ref",
317-
s: &schemaInfo{Schema: &jsonSchema.Ref{Reference: ref.Reference{Ref: "foo/bar"}}},
316+
s: &schemaInfo{Schema: &jsonSchema.Schema{Ref: "foo/bar"}},
318317
test: func(t *testing.T, s string, err error) {
319318
require.NoError(t, err)
320-
require.Equal(t, `{"schema":{"ref":"foo/bar"}}`, s)
319+
require.Equal(t, `{"schema":{"$ref":"foo/bar"}}`, s)
321320
},
322321
},
323322
{
324323
name: "json schema ref and value",
325-
s: &schemaInfo{Schema: &jsonSchema.Ref{
326-
Reference: ref.Reference{Ref: "foo/bar"},
327-
Value: &jsonSchema.Schema{Type: jsonSchema.Types{"string"}},
324+
s: &schemaInfo{Schema: &jsonSchema.Schema{
325+
Ref: "foo/bar",
326+
Type: jsonSchema.Types{"string"},
328327
}},
329328
test: func(t *testing.T, s string, err error) {
330329
require.NoError(t, err)
331-
require.Equal(t, `{"schema":{"ref":"foo/bar","type":"string"}}`, s)
330+
require.Equal(t, `{"schema":{"$ref":"foo/bar","type":"string"}}`, s)
332331
},
333332
},
334333
{

api/handler_schema_validate.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func (h *handler) validate(w http.ResponseWriter, r *http.Request) {
3636
case *schema.Ref:
3737
err = parseByOpenApi([]byte(valReq.Data), s, ct)
3838
default:
39-
err = parseByJson([]byte(valReq.Data), s.(*jsonSchema.Ref), ct)
39+
err = parseByJson([]byte(valReq.Data), s.(*jsonSchema.Schema), ct)
4040
}
4141

4242
if err != nil {
@@ -94,7 +94,7 @@ func parseByOpenApi(data []byte, s *schema.Ref, ct media.ContentType) error {
9494
return err
9595
}
9696

97-
func parseByJson(data []byte, s *jsonSchema.Ref, ct media.ContentType) error {
97+
func parseByJson(data []byte, s *jsonSchema.Schema, ct media.ContentType) error {
9898
v, err := encoding.Decode(data, encoding.WithContentType(ct))
9999
if err != nil {
100100
return err

config/dynamic/asyncApi/asyncapitest/config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ func WithSchemas(name string, s *schema.Schema) ConfigOptions {
7272
c.Components.Schemas = map[string]*asyncapi3.SchemaRef{}
7373
}
7474
c.Components.Schemas[name] = &asyncapi3.SchemaRef{
75-
Value: &asyncapi3.MultiSchemaFormat{Schema: &schema.Ref{Value: s}},
75+
Value: &asyncapi3.MultiSchemaFormat{Schema: s},
7676
}
7777
}
7878
}

config/dynamic/asyncApi/asyncapitest/message.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ func NewMessage(opts ...MessageOptions) *asyncApi.Message {
1818

1919
func WithPayload(s *schema.Schema) MessageOptions {
2020
return func(m *asyncApi.Message) {
21-
m.Payload = &asyncapi3.SchemaRef{Value: &asyncapi3.MultiSchemaFormat{Schema: &schema.Ref{Value: s}}}
21+
m.Payload = &asyncapi3.SchemaRef{Value: &asyncapi3.MultiSchemaFormat{Schema: s}}
2222
}
2323
}
2424

@@ -30,7 +30,7 @@ func WithContentType(s string) MessageOptions {
3030

3131
func WithKey(s *schema.Schema) MessageOptions {
3232
return func(m *asyncApi.Message) {
33-
m.Bindings.Kafka.Key = &asyncapi3.SchemaRef{Value: &asyncapi3.MultiSchemaFormat{Schema: &schema.Ref{Value: s}}}
33+
m.Bindings.Kafka.Key = &asyncapi3.SchemaRef{Value: &asyncapi3.MultiSchemaFormat{Schema: s}}
3434
}
3535
}
3636

config/dynamic/asyncApi/convert_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,13 @@ func TestConfig_Convert(t *testing.T) {
5656

5757
// traits
5858
require.Len(t, msg.Traits, 1)
59-
require.IsType(t, &schema.Ref{}, msg.Traits[0].Value.Headers.Value.Schema)
60-
headers := msg.Traits[0].Value.Headers.Value.Schema.(*schema.Ref)
61-
require.Equal(t, float64(100), *headers.Value.Properties.Get("my-app-header").Value.Maximum)
59+
require.IsType(t, &schema.Schema{}, msg.Traits[0].Value.Headers.Value.Schema)
60+
headers := msg.Traits[0].Value.Headers.Value.Schema.(*schema.Schema)
61+
require.Equal(t, float64(100), *headers.Properties.Get("my-app-header").Maximum)
6262

6363
// payload
6464
payload := msg.Payload.Value
65-
require.IsType(t, &schema.Ref{}, payload.Schema)
66-
s := payload.Schema.(*schema.Ref)
67-
require.Equal(t, "object", s.Value.Type[0])
65+
require.IsType(t, &schema.Schema{}, payload.Schema)
66+
s := payload.Schema.(*schema.Schema)
67+
require.Equal(t, "object", s.Type[0])
6868
}

config/dynamic/asyncApi/parsing_test.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"mokapi/config/dynamic"
77
"mokapi/config/dynamic/asyncApi"
88
"mokapi/providers/asyncapi3"
9-
"mokapi/schema/json/ref"
109
"mokapi/schema/json/schema"
1110
"net/url"
1211
"testing"
@@ -396,17 +395,17 @@ func TestSchema(t *testing.T) {
396395
t.Run("reference inside", func(t *testing.T) {
397396
target := &schema.Schema{}
398397
schemas := map[string]*asyncapi3.SchemaRef{}
399-
schemas["foo"] = &asyncapi3.SchemaRef{Value: &asyncapi3.MultiSchemaFormat{Schema: &schema.Ref{Value: target}}}
398+
schemas["foo"] = &asyncapi3.SchemaRef{Value: &asyncapi3.MultiSchemaFormat{Schema: target}}
400399
config.Components = &asyncApi.Components{Schemas: schemas}
401400
message.Payload = &asyncapi3.SchemaRef{Reference: dynamic.Reference{Ref: "#/components/schemas/foo"}}
402401
reader := &testReader{readFunc: func(cfg *dynamic.Config) error { return nil }}
403402

404403
err := config.Parse(&dynamic.Config{Info: dynamic.ConfigInfo{Url: &url.URL{}}, Data: config}, reader)
405404
require.NoError(t, err)
406-
require.Equal(t, target, message.Payload.Value.Schema.(*schema.Ref).Value)
405+
require.Equal(t, target, message.Payload.Value.Schema.(*schema.Schema))
407406
})
408407
t.Run("file reference direct", func(t *testing.T) {
409-
target := &schema.Ref{Value: &schema.Schema{}}
408+
target := &schema.Schema{}
410409
message.Payload = &asyncapi3.SchemaRef{Reference: dynamic.Reference{Ref: "foo.yml"}}
411410
reader := &testReader{readFunc: func(cfg *dynamic.Config) error {
412411
cfg.Data = target
@@ -419,7 +418,7 @@ func TestSchema(t *testing.T) {
419418
})
420419
t.Run("modify file reference direct", func(t *testing.T) {
421420
target := &schema.Schema{}
422-
message.Payload = &asyncapi3.SchemaRef{Value: &asyncapi3.MultiSchemaFormat{Schema: &schema.Ref{Reference: ref.Reference{Ref: "foo.yml"}}}}
421+
message.Payload = &asyncapi3.SchemaRef{Value: &asyncapi3.MultiSchemaFormat{Schema: &schema.Schema{Ref: "foo.yml"}}}
423422
var fooConfig *dynamic.Config
424423
reader := &testReader{readFunc: func(file *dynamic.Config) error {
425424
file.Data = &schema.Schema{}
@@ -435,6 +434,6 @@ func TestSchema(t *testing.T) {
435434
err = fooConfig.Data.(dynamic.Parser).Parse(fooConfig, reader)
436435

437436
require.NoError(t, err)
438-
require.Equal(t, target, message.Payload.Value.Schema.(*schema.Ref).Value)
437+
require.Equal(t, target, message.Payload.Value.Schema.(*schema.Schema))
439438
})
440439
}

config/dynamic/asyncApi/patch_test.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import (
55
"mokapi/config/dynamic/asyncApi"
66
"mokapi/config/dynamic/asyncApi/asyncapitest"
77
"mokapi/schema/json/schema"
8-
"mokapi/schema/json/schematest"
8+
"mokapi/schema/json/schema/schematest"
99
"testing"
1010
)
1111

@@ -400,8 +400,8 @@ func TestConfig_Patch_Message(t *testing.T) {
400400
},
401401
test: func(t *testing.T, result *asyncApi.Config) {
402402
msg := result.Channels["foo"].Value.Publish.Message.Value
403-
s := msg.Payload.Value.Schema.(*schema.Ref)
404-
require.Equal(t, "string", s.Type())
403+
s := msg.Payload.Value.Schema.(*schema.Schema)
404+
require.Equal(t, "string", s.Type.String())
405405
},
406406
},
407407
}
@@ -457,8 +457,8 @@ func TestConfig_Patch_Components(t *testing.T) {
457457
},
458458
test: func(t *testing.T, result *asyncApi.Config) {
459459
require.Len(t, result.Components.Schemas, 1)
460-
s := result.Components.Schemas["foo"].Value.Schema.(*schema.Ref)
461-
require.Equal(t, "number", s.Value.Type.String())
460+
s := result.Components.Schemas["foo"].Value.Schema.(*schema.Schema)
461+
require.Equal(t, "number", s.Type.String())
462462
},
463463
},
464464
{
@@ -469,10 +469,10 @@ func TestConfig_Patch_Components(t *testing.T) {
469469
},
470470
test: func(t *testing.T, result *asyncApi.Config) {
471471
require.Len(t, result.Components.Schemas, 2)
472-
s := result.Components.Schemas["foo"].Value.Schema.(*schema.Ref)
473-
require.Equal(t, "number", s.Value.Type.String())
474-
s = result.Components.Schemas["bar"].Value.Schema.(*schema.Ref)
475-
require.Equal(t, "string", s.Value.Type.String())
472+
s := result.Components.Schemas["foo"].Value.Schema.(*schema.Schema)
473+
require.Equal(t, "number", s.Type.String())
474+
s = result.Components.Schemas["bar"].Value.Schema.(*schema.Schema)
475+
require.Equal(t, "string", s.Type.String())
476476
},
477477
},
478478
{
@@ -483,9 +483,9 @@ func TestConfig_Patch_Components(t *testing.T) {
483483
},
484484
test: func(t *testing.T, result *asyncApi.Config) {
485485
require.Len(t, result.Components.Schemas, 1)
486-
s := result.Components.Schemas["foo"].Value.Schema.(*schema.Ref)
487-
require.Equal(t, "number", s.Value.Type.String())
488-
require.Equal(t, "double", s.Value.Format)
486+
s := result.Components.Schemas["foo"].Value.Schema.(*schema.Schema)
487+
require.Equal(t, "number", s.Type.String())
488+
require.Equal(t, "double", s.Format)
489489
},
490490
},
491491
{

config/dynamic/json.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,6 @@ func object(d *decoder, v reflect.Value) error {
119119
return fmt.Errorf("expected %s but received an object", toTypeName(v))
120120
}
121121

122-
i := v.Interface()
123-
_ = i
124-
125122
// The first byte of the object '{' has been read already.
126123
for {
127124
offset := d.d.InputOffset()
@@ -412,7 +409,7 @@ func newValueForToken(token json.Token) reflect.Value {
412409
return reflect.New(reflect.TypeOf([]interface{}{}))
413410
}
414411
case string:
415-
return reflect.ValueOf("")
412+
return reflect.New(reflect.TypeOf(""))
416413
case float64:
417414
return reflect.New(reflect.TypeOf(float64(0)))
418415
}

0 commit comments

Comments
 (0)