1个不稳定版本
新版本 0.3.0 | 2024年8月19日 |
---|
#1948 在 编码
每月下载 127 次
16KB
271 行
Prost转换
常见问题解答
为什么不使用标准的 From
和 TryFrom
特性?
我们重新定义了自己的转换特性,这看起来可能不太合理。
主要原因是为了支持删除不需要的可选字段
在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 License,版本 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则任何有意提交以包含在您的工作中的贡献,根据 Apache-2.0 许可证的定义,都应按照上述方式双重许可,不附加任何额外条款或条件。
依赖项
~0.6–1MB
~23K SLoC