diff options
Diffstat (limited to 'binapigen/binapigen.go')
-rw-r--r-- | binapigen/binapigen.go | 42 |
1 files changed, 31 insertions, 11 deletions
diff --git a/binapigen/binapigen.go b/binapigen/binapigen.go index 2dbd661..5c9553f 100644 --- a/binapigen/binapigen.go +++ b/binapigen/binapigen.go @@ -20,7 +20,7 @@ import ( "strconv" "strings" - "git.fd.io/govpp.git/binapigen/vppapi" + "go.fd.io/govpp/binapigen/vppapi" ) // generatedCodeVersion indicates a version of the generated code. @@ -71,7 +71,10 @@ func newFile(gen *Generator, apifile *vppapi.File, packageName GoPackageName, im } for _, enumType := range apifile.EnumTypes { - file.Enums = append(file.Enums, newEnum(gen, file, enumType)) + file.Enums = append(file.Enums, newEnum(gen, file, enumType, false)) + } + for _, enumflagType := range apifile.EnumflagTypes { + file.Enums = append(file.Enums, newEnum(gen, file, enumflagType, true)) } for _, aliasType := range apifile.AliasTypes { file.Aliases = append(file.Aliases, newAlias(gen, file, aliasType)) @@ -167,15 +170,18 @@ type Enum struct { vppapi.EnumType GoIdent + + IsFlag bool } -func newEnum(gen *Generator, file *File, apitype vppapi.EnumType) *Enum { +func newEnum(gen *Generator, file *File, apitype vppapi.EnumType, isFlag bool) *Enum { typ := &Enum{ EnumType: apitype, GoIdent: GoIdent{ GoName: camelCaseName(apitype.Name), GoImportPath: file.GoImportPath, }, + IsFlag: isFlag, } gen.enumsByName[typ.Name] = typ return typ @@ -243,8 +249,8 @@ func newStruct(gen *Generator, file *File, apitype vppapi.StructType) *Struct { }, } gen.structsByName[typ.Name] = typ - for _, fieldType := range apitype.Fields { - field := newField(gen, file, typ, fieldType) + for i, fieldType := range apitype.Fields { + field := newField(gen, file, typ, fieldType, i) typ.Fields = append(typ.Fields, field) } return typ @@ -271,13 +277,13 @@ func newUnion(gen *Generator, file *File, apitype vppapi.UnionType) *Union { typ := &Union{ UnionType: apitype, GoIdent: GoIdent{ - GoName: camelCaseName(apitype.Name), + GoName: withSuffix(camelCaseName(apitype.Name), "Union"), GoImportPath: file.GoImportPath, }, } gen.unionsByName[typ.Name] = typ - for _, fieldType := range apitype.Fields { - field := newField(gen, file, typ, fieldType) + for i, fieldType := range apitype.Fields { + field := newField(gen, file, typ, fieldType, i) typ.Fields = append(typ.Fields, field) } return typ @@ -302,11 +308,12 @@ const ( msgTypeEvent // msg_id, client_index ) -// message fields +// common message fields const ( fieldMsgID = "_vl_msg_id" fieldClientIndex = "client_index" fieldContext = "context" + fieldRetval = "retval" ) // field options @@ -343,7 +350,7 @@ func newMessage(gen *Generator, file *File, apitype vppapi.Message) *Message { } } n++ - field := newField(gen, file, msg, fieldType) + field := newField(gen, file, msg, fieldType, n) msg.Fields = append(msg.Fields, field) } return msg @@ -394,12 +401,24 @@ func getMsgType(m vppapi.Message) (msgType, error) { return typ, nil } +func getRetvalField(m *Message) *Field { + for _, field := range m.Fields { + if field.Name == fieldRetval { + return field + } + } + return nil +} + // Field represents a field for message or struct/union types. type Field struct { vppapi.Field GoName string + // Index defines field index in parent. + Index int + // DefaultValue is a default value of field or // nil if default value is not defined for field. DefaultValue interface{} @@ -423,10 +442,11 @@ type Field struct { FieldSizeFrom *Field } -func newField(gen *Generator, file *File, parent interface{}, apitype vppapi.Field) *Field { +func newField(gen *Generator, file *File, parent interface{}, apitype vppapi.Field, index int) *Field { typ := &Field{ Field: apitype, GoName: camelCaseName(apitype.Name), + Index: index, } switch p := parent.(type) { case *Message: |