Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions FSharp.GrpcCodeGenerator/MessageConverter.fs
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,20 @@ let hasExtensions (ctx: MessageContext) = ctx.Message.Extension.Count > 0
let fullClassName (ctx: MessageContext) =
Helpers.qualifiedInnerNameFromMessages (ctx.Message.Name.Value, ctx.ContainerMessages, ctx.File.File)

let isSyntheticOneOf msg o =
(Helpers.oneOfFields (msg, o)).[0].Proto3Optional |> ValueOption.defaultWith (fun _ -> false)

let isRealOneOf msg = isSyntheticOneOf msg >> not

let addDeprecatedFlag (ctx: MessageContext) =
match ctx.Message.Options with
| ValueSome { Deprecated = ValueSome true } ->
ctx.File.Writer.Write "[<global.System.ObsoleteAttribute>]"
| _ -> ()

let hasNestedGeneratedTypes (ctx: MessageContext) =
if ctx.Message.EnumType.Count > 0 || ctx.Message.OneofDecl.Count > 0
let hasNoRealOneOf = ctx.Message.OneofDecl |> Seq.filter (isRealOneOf ctx.Message) |> Seq.isEmpty
if ctx.Message.EnumType.Count > 0 || not hasNoRealOneOf
then true
elif ctx.Message.NestedType.Count > 0
then Seq.exists (not << Helpers.isMapEntryMessage) ctx.Message.NestedType
Expand Down Expand Up @@ -324,7 +330,7 @@ let rec writeMessageModule (ctx: MessageContext) =
ctx.File.Writer.WriteLine "module Types ="
ctx.File.Writer.Indent()

for o in ctx.Message.OneofDecl do
for o in ctx.Message.OneofDecl |> Seq.filter (isRealOneOf ctx.Message) do
let name = Helpers.snakeToPascalCase false o.Name.Value
ctx.File.Writer.WriteLine $"type {name} ="
for f in Helpers.oneOfFields (ctx.Message, o) do
Expand Down Expand Up @@ -355,8 +361,6 @@ let rec writeMessageModule (ctx: MessageContext) =
ctx.File.Writer.Outdent()

and writeMessage (ctx: FileContext, containerMessages: Message list, msg: Message) =
let isSyntheticOneOf msg o =
(Helpers.oneOfFields (msg, o)).[0].Proto3Optional |> ValueOption.defaultWith (fun _ -> false)
let ctx = {
Message = msg
File = ctx
Expand Down