diff --git a/api_documentation/api_documentation.go b/api_documentation/api_documentation.go index 44e1528e7abc21ddafd7e9af8eac837d28501ae4..ef371c7cb93f5f91212d7c9d5ae4196a04a94574 100644 --- a/api_documentation/api_documentation.go +++ b/api_documentation/api_documentation.go @@ -102,7 +102,7 @@ func GetDocs(endpointHandlers map[string]map[string]interface{}, corePath string docMethod.RequestBody = &requestBody if handler.RequestBodyType.Kind() == reflect.Struct && handler.RequestBodyType.NumField() > 0 { - schema, err := StructSchema(handler.RequestBodyType.Field(0).Type) + schema, err := StructSchema(handler.RequestBodyType) if err != nil { return Docs{}, err } @@ -115,7 +115,7 @@ func GetDocs(endpointHandlers map[string]map[string]interface{}, corePath string response, responseBodyTypeString := GetResponse(handler) docMethod.Responses = &response if handler.ResponseType.Kind() == reflect.Struct && handler.ResponseType.NumField() > 0 { - schema, err := StructSchema(handler.ResponseType.Field(0).Type) + schema, err := StructSchema(handler.ResponseType) if err != nil { return Docs{}, err } @@ -289,7 +289,12 @@ func StructSchema(t reflect.Type) (interface{}, error) { schema["type"] = "object" case reflect.Slice: schema["type"] = "array" - schema["items"] = t.Elem() + element := reflect.TypeOf(t).Elem() + items, err := StructSchema(element) + if err != nil { + return nil, errors.Wrapf(err, "failed to document") + } + schema["items"] = items default: return nil, errors.Errorf("cannot generate schema for %v kind=%v", t, t.Kind()) }