jet / falanx

Generates F# code from protobuf schema for binary and json format

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Generation fails when an Enum is inside of a oneof block

kapocskristof opened this issue · comments

The code Generation fails with an error when a message has a oneof block with an enum inside that.

Generation command falanx --inputfile .\bundle.proto --defaultnamespace Evening --outputfile bundle.fs --serializer binary

bundle.proto file

syntax = "proto3";

enum SomeEnum {
  A = 0;
  B = 1;
  C = 2;
  D = 3;
}

message SM {
  oneof result {
     string other_response = 1;
     SomeEnum some_enum = 2;
  }
}

Error message

Generating code for: .\bundle.proto
Failed to serialize property Some_enum: System.Int32. Error: System.ArgumentException: Type mismatch when building 'f': function argument type doesn't match. Expected 'Microsoft.FSharp.Core.FSharpOption`1[System.Int32]', but received type 'System.Int32'.
Parameter name: receivedType
   at Microsoft.FSharp.Quotations.PatternsModule.checkTypesSR[a](Type expectedType, Type receivedType, a name, String threeHoleSR)
   at Microsoft.FSharp.Quotations.PatternsModule.checkAppliedLambda(FSharpExpr f, FSharpExpr v)
   at Microsoft.FSharp.Quotations.PatternsModule.mkApplication(FSharpExpr v_0, FSharpExpr v_1)
   at Microsoft.FSharp.Collections.SeqModule.Fold[T,TState](FSharpFunc`2 folder, TState state, IEnumerable`1 source)
   at Falanx.Proto.Codec.Binary.Serialization.serializeProperty(FSharpExpr buffer, FSharpExpr this, PropertyDescriptor prop) in D:\a\1\s\src\Falanx.Proto.Core\BinaryCodec\Serialization.fs:line 79
USAGE: falanx [--help] --inputfile <string> [--defaultnamespace <string>] --outputfile <string> [--serializer <binary|json>]

OPTIONS:

    --inputfile <string>  specify a proto file to input.
    --defaultnamespace <string>
                          specify a default namespace to use for code generation.
    --outputfile <string> Specify the file name that the generated code will be written to.
    --serializer <binary|json>
                          serialization format. default binary
    --help                display this list of options.

Type mismatch when building 'f': function argument type doesn't match. Expected 'Microsoft.FSharp.Core.FSharpOption`1[System.Int32]', but received type 'System.Int32'.
Parameter name: receivedType

I've tried these cases to check what is going on and in these cases everything worked fine.

Without oneof

syntax = "proto3";

enum SomeEnum {
  A = 0;
  B = 1;
}

message SM {
   SomeEnum some_enum = 2;
}

Without enum

syntax = "proto3";

enum SomeEnum {
  A = 0;
  B = 1;
}

message SM {
  oneof result {
     string some_string = 1;
  }
}

Could this be yet another duplicate of #131 ?

If so there's a new Fleece version that support enums.