Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

如何同时对 .proto 文件生成代码? #122

Closed
sunnysab opened this issue Jan 8, 2023 · 3 comments
Closed

如何同时对 .proto 文件生成代码? #122

sunnysab opened this issue Jan 8, 2023 · 3 comments
Assignees

Comments

@sunnysab
Copy link

sunnysab commented Jan 8, 2023

gRPC 的新手,冒昧地打扰一下!

看到 #87 提到已经支持一个 server 包含多个 service,但不知如何生成代码?举例,我有:

proto/a.proto
proto/b.proto

其中 a.proto 定义了 service ServiceA {},以此类推。而 文档 中的举例是:

volo init --includes=idl volo-example idl/volo_example.proto

这里我们使用init命令,后面跟了我们项目的名字,意思是需要生成模板代码。在末尾,需要指定一个 IDL 表示 server 使用的 IDL。

如果只需要增加一个 IDL(如 client 的 IDL)而不需要生成模板的话,如:

$ volo idl add idl/volo_example.proto

是否说明 volo 只能对单文件生成项目?我该如何对多个 .proto 生成代码以提供多个 service ?gRPC 也不支持 service 嵌套……

谢谢!


另外还有个小问题,volo 命令行中的 entry (默认值为 default)是何用处?

@Millione
Copy link
Member

Millione commented Jan 9, 2023

我该如何对多个 .proto 生成代码以提供多个 service ?

直接通过volo idl add添加多个.proto文件即可,最后产生的yml配置文件可参考https://github.com/cloudwego/volo/blob/main/examples/volo-gen/volo.yml

另外还有个小问题,volo 命令行中的 entry (默认值为 default)是何用处?

在不同entry下定义的idl,代码会生成到不同的文件中

@sunnysab
Copy link
Author

sunnysab commented Jan 9, 2023

感谢~已经调通了。发现一些事先没有了解的地方,如:

  1. 不应该在 Client/Server 的仓库里使用 volo add, 该操作会改动 C/S 目录下的 volo.yml, 没啥用。要在 volo-gen 目录下操作。
  2. 引入外部 message 时,前面加的是 package route, 如 project.user.UserToken,这一点怪我看文档不仔细…

不过还有点小建议:

  1. volo idl add 时检查一下文件或路径是否有效。
  2. 当 build.rs 抛出 OsErr(找不到文件) 时,没有给出引用的文件路径,不好下手排查,建议 unwrap 前处理一下。
  3. add_service 后面一长串有点丑……

暂时没有其他问题了,感谢贡献者们的辛苦付出~

@sunnysab sunnysab closed this as completed Jan 9, 2023
@PureWhiteWu
Copy link
Member

问题解决了就好,非常感谢你的建议,第一点和第二点我们可以优化完善一下 ,第三点的话我们试试看能不能增加一个 From 来自动 build Service?cc @Millione

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

3 participants