Skip to content

Commit

Permalink
Update parser.go
Browse files Browse the repository at this point in the history
  • Loading branch information
sdghchj committed May 8, 2020
1 parent a7e0180 commit c9d332d
Showing 1 changed file with 30 additions and 4 deletions.
34 changes: 30 additions & 4 deletions parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -846,15 +846,17 @@ func (parser *Parser) parseStructField(pkgName string, field *ast.Field) (map[st
properties := map[string]spec.Schema{}

if field.Names == nil {
propertyName, err := getPropertyName(pkgName, field.Type, parser)
fullTypeName, err := getFieldType(field.Type)
if err != nil {
return properties, []string{}, nil
}

if propertyName.CrossPkg != "" {
pkgName = propertyName.CrossPkg
typeName := fullTypeName

if splits := strings.Split(fullTypeName, "."); len(splits) > 1 {
pkgName = splits[0]
typeName = splits[1]
}
typeName := propertyName.SchemaType

typeSpec := parser.TypeDefinitions[pkgName][typeName]
if typeSpec == nil {
Expand Down Expand Up @@ -1129,6 +1131,30 @@ func (parser *Parser) parseStructField(pkgName string, field *ast.Field) (map[st
return properties, nil, nil
}

func getFieldType(field interface{}) (string, error) {

switch ftype := field.(type) {
case *ast.Ident:
return ftype.Name, nil

case *ast.SelectorExpr:
packageName, err := getFieldType(ftype.X)
if err != nil {
return "", err
}
return fmt.Sprintf("%s.%s", packageName, ftype.Sel.Name), nil

case *ast.StarExpr:
fullName, err := getFieldType(ftype.X)
if err != nil {
return "", err
}
return fullName, nil

}
return "", fmt.Errorf("unknown field type %#v", field)
}

func (parser *Parser) parseField(pkgName string, field *ast.Field) (*structField, error) {
prop, err := getPropertyName(pkgName, field.Type, parser)
if err != nil {
Expand Down

0 comments on commit c9d332d

Please sign in to comment.