Arshia001 / FSharp.GrpcCodeGenerator

A protoc plugin to enable generation of F# code + supporting libraries
MIT License
81 stars 9 forks source link

Specify MergeFrom behavior using FieldMask.MergeOptions #29

Closed LyndonGingerich closed 1 year ago

LyndonGingerich commented 1 year ago

Is it currently possible to use FieldMask.MergeOptions to modify the behavior of the MergeFrom members generated? I am particularly interested in ReplaceRepeatedFields.

LyndonGingerich commented 1 year ago

Tagging @marner2 in case he gets bored.

LyndonGingerich commented 1 year ago

FieldConverter.MessageFieldConverter.writeMergingCode looks like the relevant function:

let writeMergingCode (field: Field, containingType: Message) (ctx: FileContext) =
    let propName = propertyName (containingType, field)
    let propCheck = hasPropertyCheck (ctx, containingType, field, "other")
    ctx.Writer.WriteLines [
        $"if {propCheck}"
        $"then"
    ]

    ctx.Writer.Indent()
    ctx.Writer.WriteLines [
        $"if me.{propName}.IsNone"
        $"then me.{propName} <- ValueSome({typeNameWithoutOption (ctx, field)}.empty())"
        $"(me.{propName}.Value :> global.Google.Protobuf.IMessage<{typeNameWithoutOption (ctx, field)}>).MergeFrom(other.{propName}.Value)"
    ]
    ctx.Writer.Outdent()

I see nothing here about MergeOptions.

I don't yet know how FieldMask.MergeOptions normally works, so I'll keep searching for an example, though I'm finding the search difficult.

LyndonGingerich commented 1 year ago

I got more information. I think I was barking up the wrong tree by trying to modify code generation.