mirror of
https://github.com/zeromicro/go-zero.git
synced 2026-05-10 16:30:01 +08:00
fix array schmea generation incorrect (#4801)
This commit is contained in:
@@ -67,7 +67,7 @@ func itemsFromGoType(tp apiSpec.Type) *spec.SchemaOrArray {
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
return itemFromGoType(array)
|
||||
return itemFromGoType(array.Value)
|
||||
}
|
||||
|
||||
func mapFromGoType(tp apiSpec.Type) *spec.SchemaOrBool {
|
||||
@@ -75,18 +75,23 @@ func mapFromGoType(tp apiSpec.Type) *spec.SchemaOrBool {
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
p, r := propertiesFromType(mapType.Value)
|
||||
var schema = &spec.Schema{
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Type: typeFromGoType(mapType.Value),
|
||||
AdditionalProperties: mapFromGoType(mapType.Value),
|
||||
},
|
||||
}
|
||||
switch sampleTypeFromGoType(mapType.Value) {
|
||||
case swaggerTypeArray:
|
||||
schema.Items = itemsFromGoType(mapType.Value)
|
||||
case swaggerTypeObject:
|
||||
p, r := propertiesFromType(mapType.Value)
|
||||
schema.Properties = p
|
||||
schema.Required = r
|
||||
}
|
||||
return &spec.SchemaOrBool{
|
||||
Allows: true,
|
||||
Schema: &spec.Schema{
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Type: typeFromGoType(mapType.Value),
|
||||
Items: itemsFromGoType(mapType.Value),
|
||||
Properties: p,
|
||||
Required: r,
|
||||
AdditionalProperties: mapFromGoType(mapType.Value),
|
||||
},
|
||||
},
|
||||
Schema: schema,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -101,41 +106,8 @@ func itemFromGoType(tp apiSpec.Type) *spec.SchemaOrArray {
|
||||
},
|
||||
},
|
||||
}
|
||||
case apiSpec.DefineStruct:
|
||||
var (
|
||||
properties = map[string]spec.Schema{}
|
||||
requiredFields []string
|
||||
)
|
||||
rangeMemberAndDo(itemType, func(tag *apiSpec.Tags, required bool, member apiSpec.Member) {
|
||||
jsonTag, _ := tag.Get(tagJson)
|
||||
if jsonTag == nil {
|
||||
return
|
||||
}
|
||||
minimum, maximum, exclusiveMinimum, exclusiveMaximum := rangeValueFromOptions(jsonTag.Options)
|
||||
if required {
|
||||
requiredFields = append(requiredFields, jsonTag.Name)
|
||||
}
|
||||
p, r := propertiesFromType(member.Type)
|
||||
properties[jsonTag.Name] = spec.Schema{
|
||||
SwaggerSchemaProps: spec.SwaggerSchemaProps{
|
||||
Example: exampleValueFromOptions(jsonTag.Options, member.Type),
|
||||
},
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: formatComment(member.Comment),
|
||||
Type: typeFromGoType(member.Type),
|
||||
Default: defValueFromOptions(jsonTag.Options, member.Type),
|
||||
Maximum: maximum,
|
||||
ExclusiveMaximum: exclusiveMaximum,
|
||||
Minimum: minimum,
|
||||
ExclusiveMinimum: exclusiveMinimum,
|
||||
Enum: enumsValueFromOptions(jsonTag.Options),
|
||||
Items: itemsFromGoType(member.Type),
|
||||
Properties: p,
|
||||
Required: r,
|
||||
AdditionalProperties: mapFromGoType(member.Type),
|
||||
},
|
||||
}
|
||||
})
|
||||
case apiSpec.DefineStruct, apiSpec.NestedStruct:
|
||||
properties, requiredFields := propertiesFromType(itemType)
|
||||
return &spec.SchemaOrArray{
|
||||
Schema: &spec.Schema{
|
||||
SchemaProps: spec.SchemaProps{
|
||||
@@ -148,16 +120,13 @@ func itemFromGoType(tp apiSpec.Type) *spec.SchemaOrArray {
|
||||
},
|
||||
}
|
||||
case apiSpec.PointerType:
|
||||
return itemsFromGoType(itemType.Type)
|
||||
return itemFromGoType(itemType.Type)
|
||||
case apiSpec.ArrayType:
|
||||
p, r := propertiesFromType(itemType.Value)
|
||||
return &spec.SchemaOrArray{
|
||||
Schema: &spec.Schema{
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Type: typeFromGoType(itemType.Value),
|
||||
Items: itemsFromGoType(itemType.Value),
|
||||
Properties: p,
|
||||
Required: r,
|
||||
Type: typeFromGoType(itemType),
|
||||
Items: itemsFromGoType(itemType),
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user