elixir-grpc / grpc-reflection

elixir graph reflection support
Apache License 2.0
9 stars 6 forks source link

[feature] Support nested message #15

Closed zhihuizhang17 closed 8 months ago

zhihuizhang17 commented 8 months ago

Summary

This PR introduces support for nested types within protobuf message definitions. This enhancement allows for more complex and structured data organization within our protobuf schemas.

Changes include modifications to the message parsing logic to correctly handle and include nested types in file descriptor dependencies. This ensures that all nested types are properly recognized and processed.

Unit test

Test cases run with message HelloRequest defined as follow:

message HelloRequest {
  string name = 1;

  message Payload {
    google.protobuf.StringValue data = 1;

    message Location {
      double latitude = 1;
      double longitude = 2;
    }

    Location location = 2;
  }

  Payload payload = 2;
}

Before implement:

> grpcurl -plaintext localhost:50051 describe helloworld.HelloRequest

Failed to resolve symbol "helloworld.HelloRequest": proto: message field "helloworld.HelloRequest.Payload.data" cannot resolve type: "google.protobuf.StringValue" not found

After implement:

> grpcurl -plaintext localhost:50051 describe helloworld.HelloRequest           

helloworld.HelloRequest is a message:
message HelloRequest {
  string name = 1;
  .helloworld.HelloRequest.Payload payload = 2;
  message Payload {
    .google.protobuf.StringValue data = 1;
    .helloworld.HelloRequest.Payload.Location location = 2;
    message Location {
      double latitude = 1;
      double longitude = 2;
    }
  }
}

And mix test passed all test cases.