X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=cmd%2Fbinapi-generator%2Fobjects.go;h=9871abc5722001fe7626d854a5a4aec6506a5f5a;hb=280b1c6c83b676ef4e592f4ecf60cb5b54b6a753;hp=97318cbead69e698841d654e7c7069044115defe;hpb=868b541e296dc47748ad03b8f0174c828d996529;p=govpp.git diff --git a/cmd/binapi-generator/objects.go b/cmd/binapi-generator/objects.go index 97318cb..9871abc 100644 --- a/cmd/binapi-generator/objects.go +++ b/cmd/binapi-generator/objects.go @@ -1,41 +1,46 @@ package main -import "strings" +import "fmt" // Package represents collection of objects parsed from VPP binary API JSON data type Package struct { - APIVersion string - Enums []Enum - Unions []Union - Types []Type - Aliases []Alias - Messages []Message - Services []Service - RefMap map[string]string + Name string + Version string + CRC string + Services []Service + Enums []Enum + Aliases []Alias + Types []Type + Unions []Union + Messages []Message + RefMap map[string]string + Imports map[string]Import } -// MessageType represents the type of a VPP message -type MessageType int +type Import struct { + Package string +} -const ( - requestMessage MessageType = iota // VPP request message - replyMessage // VPP reply message - eventMessage // VPP event message - otherMessage // other VPP message -) +// Service represents VPP binary API service +type Service struct { + Name string + RequestType string + ReplyType string + Stream bool + Events []string +} -// Message represents VPP binary API message -type Message struct { - Name string - CRC string - Fields []Field +// Enum represents VPP binary API enum +type Enum struct { + Name string + Type string + Entries []EnumEntry } -// Type represents VPP binary API type -type Type struct { - Name string - CRC string - Fields []Field +// EnumEntry represents VPP binary API enum entry +type EnumEntry struct { + Name string + Value interface{} } // Alias represents VPP binary API alias @@ -45,8 +50,8 @@ type Alias struct { Length int } -// Union represents VPP binary API union -type Union struct { +// Type represents VPP binary API type +type Type struct { Name string CRC string Fields []Field @@ -54,62 +59,81 @@ type Union struct { // Field represents VPP binary API object field type Field struct { - Name string - Type string - Length int - SizeFrom string + Name string + Type string + Length int + SpecifiedLen bool + SizeFrom string + Meta FieldMeta } -func (f *Field) IsArray() bool { - return f.Length > 0 || f.SizeFrom != "" +// FieldMeta represents VPP binary API meta info for field +type FieldMeta struct { + Limit int + Default string } -// Enum represents VPP binary API enum -type Enum struct { - Name string - Type string - Entries []EnumEntry +// Union represents VPP binary API union +type Union struct { + Name string + CRC string + Fields []Field } -// EnumEntry represents VPP binary API enum entry -type EnumEntry struct { - Name string - Value interface{} +// Message represents VPP binary API message +type Message struct { + Name string + CRC string + Fields []Field } -// Service represents VPP binary API service -type Service struct { - Name string - RequestType string - ReplyType string - Stream bool - Events []string -} +// MessageType represents the type of a VPP message +type MessageType int -func (s Service) MethodName() string { - reqTyp := camelCaseName(s.RequestType) +const ( + requestMessage MessageType = iota // VPP request message + replyMessage // VPP reply message + eventMessage // VPP event message + otherMessage // other VPP message +) - // method name is same as parameter type name by default - method := reqTyp - if s.Stream { - // use Dump as prefix instead of suffix for stream services - if m := strings.TrimSuffix(method, "Dump"); method != m { - method = "Dump" + m +// printPackage prints all loaded objects for package +func printPackage(pkg *Package) { + logf("package: %s %s (%s)", pkg.Name, pkg.Version, pkg.CRC) + if len(pkg.Enums) > 0 { + logf(" %d enums:", len(pkg.Enums)) + for _, enum := range pkg.Enums { + logf(" - %s: %+v", enum.Name, enum) + } + } + if len(pkg.Unions) > 0 { + logf(" %d unions:", len(pkg.Unions)) + for _, union := range pkg.Unions { + logf(" - %s: %+v", union.Name, union) + } + } + if len(pkg.Types) > 0 { + logf(" %d types:", len(pkg.Types)) + for _, typ := range pkg.Types { + logf(" - %s (%d fields): %+v", typ.Name, len(typ.Fields), typ) + } + } + if len(pkg.Messages) > 0 { + logf(" %d messages:", len(pkg.Messages)) + for _, msg := range pkg.Messages { + logf(" - %s (%d fields) %s", msg.Name, len(msg.Fields), msg.CRC) + } + } + if len(pkg.Services) > 0 { + logf(" %d services:", len(pkg.Services)) + for _, svc := range pkg.Services { + var info string + if svc.Stream { + info = "(STREAM)" + } else if len(svc.Events) > 0 { + info = fmt.Sprintf("(EVENTS: %v)", svc.Events) + } + logf(" - %s: %q -> %q %s", svc.Name, svc.RequestType, svc.ReplyType, info) } } - - return method -} - -func (s Service) IsDumpService() bool { - return s.Stream -} - -func (s Service) IsEventService() bool { - return len(s.Events) > 0 -} - -func (s Service) IsRequestService() bool { - // some binapi messages might have `null` reply (for example: memclnt) - return s.ReplyType != "" && s.ReplyType != "null" // not null }