yeqown / protoc-gen-fieldmask

Generate FieldMask utility functions for protobuf
MIT License
34 stars 9 forks source link

只能在当前文件中查找,同package但是不同文件的message无法定位 #21

Open liguangsheng opened 1 year ago

liguangsheng commented 1 year ago

protoc-gen-fieldmask只会在当前文件中查找,同package但是不同文件的message就找不到了。

举个例子: grpc.proto

message BatchGetUserRequest {
  string user_id = 1;
  google.protobuf.FieldMask user_field_mask = 2 [
    (fieldmask.option.Option).in = {gen: false},
    (fieldmask.option.Option).out = {
      gen: true,
      message: "BatchGetUserResponse",
    }
  ];
}

message BatchGetUserResponse {
  repeated User users = 1;
}

types.proto

message User {
  string id = 1;
  string name = 2;
}

一开始直接指定的BatchGetUserResponse,但是repeated只能识别users这个字段,无法识别User里的每个字段。

后来我改成message: "User",但是找不到User的定义。

再后来我改成message: "user.User",这回找到User定义了,但是生成的go代码会多一个当前package的import,形成循环依赖。

yeqown commented 1 year ago

抱歉,目前这部分还是不完善。

当时想过要不要对于嵌套类型生成 mask 相关的代码:可能存在深层次甚至循环问题,就没有识别嵌套类型(User)的字段

liguangsheng commented 1 year ago

目前好像是必须指定为同名的Response,不能直接指定为真正想要mask的那个message,只能想办法识别嵌套类型。

改成直接指定真正想要mask的message是不是好点?比如对于BatchGetUserRequest,我真正想要mask的时User而不是BatchGetUserResponse?