| 388 | } |
| 389 | |
| 390 | func formatTypeVerbose(typ *sppb.Type) string { |
| 391 | switch code := typ.GetCode(); code { |
| 392 | case sppb.TypeCode_ARRAY: |
| 393 | return fmt.Sprintf("ARRAY<%v>", formatTypeVerbose(typ.GetArrayElementType())) |
| 394 | case sppb.TypeCode_ENUM, sppb.TypeCode_PROTO: |
| 395 | return typ.GetProtoTypeFqn() |
| 396 | case sppb.TypeCode_STRUCT: |
| 397 | var structTypeStrs []string |
| 398 | for _, v := range typ.GetStructType().GetFields() { |
| 399 | if v.GetName() != "" { |
| 400 | structTypeStrs = append(structTypeStrs, fmt.Sprintf("%v %v", v.GetName(), formatTypeVerbose(v.GetType()))) |
| 401 | } else { |
| 402 | structTypeStrs = append(structTypeStrs, fmt.Sprintf("%v", formatTypeVerbose(v.GetType()))) |
| 403 | } |
| 404 | } |
| 405 | return fmt.Sprintf("STRUCT<%v>", strings.Join(structTypeStrs, ", ")) |
| 406 | default: |
| 407 | if name, ok := sppb.TypeCode_name[int32(code)]; ok { |
| 408 | return name |
| 409 | } else { |
| 410 | return "UNKNOWN" |
| 411 | } |
| 412 | } |
| 413 | } |