Fix "oneOf" parsing, update to protocol version 1.58 (#85)

* fix "oneOf" parsing in protocol_gen

* update protocol version to 1.58.0
This commit is contained in:
nikitalita
2022-12-16 05:43:39 -08:00
committed by GitHub
parent 88e8952014
commit 87f8b4a06b
6 changed files with 1079 additions and 702 deletions

View File

@@ -152,6 +152,7 @@ type definition struct {
Description string `json:"description"`
Properties properties `json:"properties"`
Required []string `json:"required"`
OneOf []*definition `json:"oneOf"`
AllOf []*definition `json:"allOf"`
Ref string `json:"$ref"`
OpenEnum []string `json:"_enum"`
@@ -486,6 +487,28 @@ func (r *root) getType(def *definition) (builtType cppType, err error) {
return ref.def.cppType, nil
}
if len(def.OneOf) != 0 {
args := []string{}
deps := []cppType{}
for i := 0; i < len(def.OneOf); i++ {
if def.OneOf[i] == nil {
return nil, fmt.Errorf("Item %d in oneOf is nil", i)
}
elTy, err := r.getType(def.OneOf[i])
if err != nil {
return nil, err
}
deps = append(deps, elTy)
args = append(args, elTy.Name())
}
return &cppBasicType{
name: "variant<" + strings.Join(args, ", ") + ">",
desc: def.Description,
deps: deps,
}, nil
}
v := reflect.ValueOf(def.Ty)
if v.Kind() == reflect.Interface {