mennanov / fieldmask-utils

Protobuf Field Mask Go utils
MIT License
229 stars 26 forks source link

question: any way to conver Mask to MaskInverse? #4

Closed elvizlai closed 4 years ago

elvizlai commented 4 years ago

some code may help:

mask, _ := fieldmask_utils.MaskFromProtoFieldMask(GetFieldMask(), generator.CamelCase)

fieldmask_utils.StructToStruct(fieldmask_utils.MaskInverse(mask), src, dst)

FROM readme example:

mask := fieldmask_utils.MaskInverse{"Id": nil, "Friends": fieldmask_utils.MaskInverse{"Username": nil}}

can also write as

fieldmask_utils.Mask{"Id": nil, "Friends": fieldmask_utils.MaskInverse{"Username": nil}}
mennanov commented 4 years ago

Thanks for PR!

Is there a reason you want to convert a Mask to MaskInverse instead of just creating a MaskInverse directly?

elvizlai commented 4 years ago

@mennanov yeah, MaskInverse can not create from proto descriptor.

use case

    rpc PingMask(ExperimentalPayload) returns (ExperimentalPayload) {
        option (api.resource) = {
            in: { field_mask: { paths: [ "password", "nested.ak" ] } }
            out: { field_mask: { paths: [ "code" ] } }
        };
    };

for gRPC, some masked field should not be sent to log interceptor. we apply this strategy in method descriptor.

MaskInverse can not create from such code.

mennanov commented 4 years ago

Fixed in https://github.com/mennanov/fieldmask-utils/pull/8