#prost #native #protobuf

prost-convert

从GRPC proto文件生成更多符合Rust语法的代码

1个不稳定版本

新版本 0.3.0 2024年8月19日

#1948编码

Download history 127/week @ 2024-08-16

每月下载 127

MIT/Apache

16KB
271

Prost转换

常见问题解答

为什么不使用标准的 FromTryFrom 特性?

我们重新定义了自己的转换特性,这看起来可能不太合理。

主要原因是为了支持删除不需要的可选字段

在Rust中,我们有

impl<T> From<T> for Option<T> { /**/}

这允许

let o: Option<u8> = Option::from(67);
assert_eq!(Some(67), o);

但如果我们有

struct U;

impl From<U> for T { /**/}

我们没有

impl<T, U> From<U> for Option<T>
where
    T: From<U>,
{
    fn from(value: U) -> Self {
        Some(value.into())
    }
}

由于孤儿规则,我们无法添加此impl,所以我们添加了自己的转换特性。它对用户来说通常是透明的,因为它大部分时间将通过 derive 宏实现。

待办事项

  • 从 std 的 NonZero 类型实现 impl。
  • 探讨使用关联类型作为错误的可能性。
  • Bytes 实现 impl https://docs.rs/prost/latest/prost/trait.Message.html#foreign-impls
  • Prost 支持 从 HashMap 切换到 BTreeMap,所以我们也应该支持 BTreeMap
  • 我们应该为所有在 std 中实现 From/TryFrom 的类型(例如 u16 和 u32)提供一个泛型 impl。当有原生类型(u16)无法在 proto 中表达时很有用。如果我们不控制 proto,并且他们定义了一个 uint64,而我们想有一个 u16,我们可以提供转换。

许可证

许可协议为以下之一

由您选择。

贡献

除非您明确声明,否则任何有意提交以包含在您的工作中的贡献,根据 Apache-2.0 许可证的定义,都应按照上述方式双重许可,不附加任何额外条款或条件。

依赖项

~0.6–1MB
~23K SLoC