Skip to content

Commit 333ba5e

Browse files
committed
[kit] fix desc.Parser issues
1 parent d3952a6 commit 333ba5e

3 files changed

Lines changed: 40 additions & 18 deletions

File tree

contrib/swagger/swagger.go

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,13 @@ func (sg *Generator) WriteSwagTo(w io.Writer, descs ...desc.ServiceDesc) error {
6565
spec.NewTag(ps.Origin.Name, ps.Origin.Description, nil),
6666
)
6767

68-
for _, c := range ps.Contracts {
69-
sg.addSwagOp(swag, ps.Origin.Name, c)
70-
}
71-
7268
for _, m := range ps.Messages() {
7369
sg.addSwagDefinition(swag, m)
7470
}
71+
72+
for _, c := range ps.Contracts {
73+
sg.addSwagOp(swag, ps.Origin.Name, c)
74+
}
7575
}
7676

7777
swaggerJSON, err := swag.MarshalJSON()
@@ -203,35 +203,45 @@ func (sg *Generator) addSwagDefinition(swag *spec.Swagger, m desc.ParsedMessage)
203203
var wrapFuncChain schemaWrapperChain
204204
wrapFuncChain = wrapFuncChain[:0]
205205

206-
kind := p.Kind
206+
var (
207+
kind = p.Kind
208+
name string
209+
)
210+
207211
switch kind {
208212
case desc.Map:
209213
wrapFuncChain.Add(spec.MapProperty)
210214
case desc.Array:
211215
wrapFuncChain.Add(spec.ArrayProperty)
216+
case desc.Object:
217+
name = p.Message.Name
212218
}
213219

214220
e := p.Element
215221
for e != nil {
222+
kind = e.Kind
216223
switch e.Kind {
217224
case desc.Map:
218225
wrapFuncChain.Add(spec.MapProperty)
219226
case desc.Array:
220227
wrapFuncChain.Add(spec.ArrayProperty)
228+
case desc.Object:
229+
name = e.Message.Name
221230
}
222231
e = e.Element
223232
}
224233

225234
switch kind {
226235
case desc.Object:
227-
def.SetProperty(p.Name, wrapFuncChain.Apply(spec.RefProperty(fmt.Sprintf("#/definitions/%s", p.Message.Name))))
236+
def.SetProperty(p.Name, wrapFuncChain.Apply(spec.RefProperty(fmt.Sprintf("#/definitions/%s", name))))
228237
case desc.String:
229238
def.SetProperty(p.Name, wrapFuncChain.Apply(spec.StringProperty()))
230239
case desc.Float:
231240
def.SetProperty(p.Name, wrapFuncChain.Apply(spec.Float64Property()))
232241
case desc.Integer:
233242
def.SetProperty(p.Name, wrapFuncChain.Apply(spec.Int64Property()))
234243
default:
244+
fmt.Println(p.Name, kind)
235245
def.SetProperty(p.Name, wrapFuncChain.Apply(spec.StringProperty()))
236246
}
237247
}

kit/desc/parser.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -99,14 +99,14 @@ func (ps *ParsedService) parseContract(c Contract) []ParsedContract {
9999

100100
func (ps *ParsedService) parseMessage(m kit.Message, enc kit.Encoding) ParsedMessage {
101101
mt := reflect.TypeOf(m)
102-
pm := ParsedMessage{
103-
Name: mt.Name(),
104-
}
105-
106102
if mt.Kind() == reflect.Ptr {
107103
mt = mt.Elem()
108104
}
109105

106+
pm := ParsedMessage{
107+
Name: mt.Name(),
108+
}
109+
110110
if mt.Kind() != reflect.Struct {
111111
return pm
112112
}
@@ -155,7 +155,7 @@ func (ps *ParsedService) parseMessage(m kit.Message, enc kit.Encoding) ParsedMes
155155
pe.Element = &ParsedElement{}
156156
pe = pe.Element
157157
case Object:
158-
pm := ps.parseMessage(ft, enc)
158+
pm := ps.parseMessage(reflect.New(ft).Interface(), enc)
159159
pe.Message = &pm
160160
keepGoing = false
161161
default:

kit/desc/parser_test.go

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ var _ = Describe("DescParser", func() {
6161
SetName("c1").
6262
NamedSelector("s1", newREST(kit.JSON, "/path1", "GET")).
6363
NamedSelector("s2", newREST(kit.JSON, "/path2", "POST")).
64-
In(NestedMessage{}).
65-
Out(FlatMessage{}),
64+
In(&NestedMessage{}).
65+
Out(&FlatMessage{}),
6666
)
6767

6868
It("should parse the description", func() {
@@ -93,11 +93,23 @@ var _ = Describe("DescParser", func() {
9393
Expect(contract0.Request.Message.Fields[0].Name).To(Equal("a"))
9494
Expect(contract0.Request.Message.Fields[0].Kind).To(Equal(desc.String))
9595

96-
Expect(contract0.Request.Message.Fields[1].Name).To(Equal("b"))
97-
Expect(contract0.Request.Message.Fields[1].Kind).To(Equal(desc.Object))
98-
Expect(contract0.Request.Message.Fields[1].Message.Fields).To(HaveLen(6))
99-
Expect(contract0.Request.Message.Fields[1].Message.Fields[0].Name).To(Equal("a"))
100-
Expect(contract0.Request.Message.Fields[1].Message.Fields[0].Kind).To(Equal(desc.String))
96+
b := contract0.Request.Message.Fields[1]
97+
Expect(b.Name).To(Equal("b"))
98+
Expect(b.Kind).To(Equal(desc.Object))
99+
Expect(b.Message.Name).To(Equal("FlatMessage"))
100+
Expect(b.Message.Fields).To(HaveLen(6))
101+
Expect(b.Message.Fields[0].Name).To(Equal("a"))
102+
Expect(b.Message.Fields[0].Kind).To(Equal(desc.String))
103+
104+
ba := contract0.Request.Message.Fields[2]
105+
Expect(ba.Name).To(Equal("ba"))
106+
Expect(ba.Kind).To(Equal(desc.Array))
107+
Expect(ba.Message).To(BeNil())
108+
Expect(ba.Element.Kind).To(Equal(desc.Object))
109+
Expect(ba.Element.Message.Name).To(Equal("FlatMessage"))
110+
Expect(ba.Element.Message.Fields).To(HaveLen(6))
111+
Expect(ba.Element.Message.Fields[0].Name).To(Equal("a"))
112+
Expect(ba.Element.Message.Fields[0].Kind).To(Equal(desc.String))
101113

102114
g := contract0.Responses[0].Message.Fields[4]
103115
Expect(g.Name).To(Equal("g"))

0 commit comments

Comments
 (0)