#binary #encode #decode

无 std radiation

将 Rust 类型转换为原始字节及其逆转换

14 个版本

0.3.7 2024 年 3 月 4 日
0.3.5 2023 年 11 月 1 日
0.3.4 2023 年 2 月 26 日
0.3.3 2022 年 10 月 3 日
0.2.0 2022 年 7 月 8 日

#299Rust 模式

每月 33 次下载

MIT 许可证

44KB
1.5K SLoC

Radiation

无线电接收器吸收电磁辐射并将其转换为某些信号。无线电发射器将信号转换为电磁辐射并发射它。

此crate将原始字节称为辐射。它允许“吸收”辐射并将其转换为 Rust 类型,反之亦然,“发射”将 Rust 类型作为辐射。

特质 Absorb 解析字节并返回类型化值。它可能失败并返回错误。

特质 Emit 将类型化值转换为原始字节。

派生

属性 tag

在枚举中。指定标签的类型,它可以是实现 AbsorbDisplay 的任何类型(用于错误处理)。默认为 u16

在变体中。指定变体的标签值。如果标签的类型实现 DefaultAdd 数值(例如,执行 tag + 1 有意义)。则可以省略该属性。默认为 0,1,2,...

属性 custom_absorbcustom_emit

在字段中。允许指定吸收和发射字段的自定义函数。如果字段具有外部类型(例如 SocketAddr),则很有用。

属性 as_str

在字段中。实现将吸收和发射字符串,并使用 FromStrDisplay 在字段上进行转换。

示例

#[derive(Debug, PartialEq, Eq, Absorb, Emit)]
#[tag(u8)]
enum SomeEnum {
    #[tag(1)]
    A {
        one: u8,
        two: u8,
        // specify a function to parse the field with
        #[custom_absorb(absorb)]
        #[custom_emit(emit)]
        three: u16,
    },
    // use `FromStr` implementation to parse the value from `str`
    B(#[as_str] u16),
    C(u32),
}

有关更多信息和方法,请参阅 tests.rs

限制

属性 limit 在解析字段时覆盖 L 参数。此属性提供实现 Limit 特质的类型。

该特质提供字节的上下限。它还携带有关下一个字段或内部结构将应用哪种限制的信息。

有关更多信息和方法,请参阅 tests.rs

依赖关系

~0.9–7MB
~149K SLoC