问题标签 [prost]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1899 浏览

rust - 在 rust 中使用 prost 和 tonic 时如何导入 .proto?

我正在尝试使用 crates prost 和 tonic 在 rust 中构建一个简单的 gRPC 客户端。我的原型定义非常简单,但我突然坚持使用从其他原型导入的消息。

build.rs的很简单:

当我将 protos 包含在中时,问题就开始了main.rs

编译失败并出现以下错误:

这里可能有什么问题?!我将我的游乐场项目上传到github,以防它可能有用。

0 投票
1 回答
1209 浏览

rust - 如何使用 serde 反序列化 Prost 枚举?

我正在使用 [prost] 从 protobuf 生成结构。其中一个结构非常简单:

这会生成如下代码:

我必须将大量 JSON 文件解析为这些消息。这些是数万行长,但是当这个字段出现时,它看起来像:

所以,简而言之,它的反序列化格式是一个字符串,序列化是i32.

如果我只是运行它并尝试解析 JSON,我会得到:

这当然是有道理的——没有反射来引导反序列化从"up"to 0

问题:如何设置serde将这些字符串解析为匹配的整数值?我已经彻底阅读了 serde 文档,看来我可能需要为此编写一个自定义反序列化器,尽管这似乎有点过头了。

我尝试了一些不同的 serde 属性,例如:

使用此功能:

但是,尽管serde 文档告诉我,该方法甚至没有被调用(但编译成功)。

我还在字段上尝试了一个字段属性Direction

但这当然需要一个不同的签名,而不仅仅是&strthe trait std::convert::From<__D> is not implemented for common::Direction

我只需要编写一个自定义反序列化器吗?似乎是一个足够常见的用例,可以使用一种模式。

注意:这是解决的相反问题serde_repr。我没有看到让它在这里工作的方法。

0 投票
0 回答
149 浏览

rust - 如何跨多个微服务共享 .proto 消息?

我正在尝试创建一堆微服务。大多数 grpc 消息使用此消息

i18n 还实现了额外的方法来为请求上下文选择正确的键。这样

我想创建一个 Crate,它将存储在私有 GitHub 存储库中,带有 proto 和附加功能,以便我可以使用 cargo 在多个微服务之间共享 i18n 消息和逻辑。

我有没有机会使用extern_path来做到这一点?

如果不能,您能否分享您使用 prost 库的经验以及您是如何共享代码的?

0 投票
1 回答
787 浏览

rust - 如何在补品中将数据传递给 protobuf `oneof`?

如何将数据传递给toniconeof中的 protobuf ?

我在文档中找不到任何说明或示例。

0 投票
1 回答
126 浏览

rust - Prost - 不能在 trait 对象上调用`encode` 方法

我正在尝试编写一个通用函数来使用以下代码对 prost 消息进行编码和解码。

我收到以下错误。

如何解决这个问题?

0 投票
0 回答
107 浏览

generics - 函数接受类型参数

我正在开发一个客户端服务器应用程序,在该应用程序中,我使用 rust crate prost 将消息作为协议缓冲区发送到每个协议缓冲区。目前我有一个通用send_message函数,可以采用任何实现该prost::Message特征的结构。我正在尝试创建一个类似的函数来读取实现prost::Message. 我认为问题在于,decode实现类型的方法prost::Message是关联函数而不是实例方法。实现的对象的实际实例prost::Message是在函数中创建的。

我想知道是否有一种方法可以制作一个通用read_message函数,该函数可以接受任何实现prost::Message并在该类型上使用关联函数decode的类型。

这是我目前的send_message功能:

现在我有两个read_TYPE_message功能:

当我尝试以下操作时:

我得到错误

我希望能够使用这样的功能:

0 投票
2 回答
405 浏览

rust - 没有为 Type 实现 trait `std::marker::Copy`

我正在尝试在 b/w 不同的线程周围移动一些数据,但收到 ole Copy trait-not-implemented 错误。这是一些代码:

错误:

我不能(或者我可以)Copy在结构上添加属性,Publisher但这不起作用,因为并非所有字段都实现了Copy. 尽管如此,我已经注释掉了Publisher不隐含的字段Copy并将属性添加到它只是为了查看,并且通过这种方法我得到:

Request 是protobuf使用 prost lib 编译的基于结构的结构。我无法向其中添加Copy属性,因为它的某些字段没有实现Copy,例如Stringand Timestamp

我想知道这里的设计是否天生就很糟糕,或者是否有一个简单的修复方法。

0 投票
2 回答
174 浏览

rust - Rust / Prost:如何将调试添加到结构和联合?

看起来 prost protobuf 生成器仅添加derive(Debug)到生成的枚举类型(并且仅添加不在pub mod块内的枚举)。生成的结构或联合都没有应用它。我怎样才能让 prost 将其添加到所有内容中?

使用 Prost 0.9 版和 rustic 1.56