3 个版本

使用旧的 Rust 2015

0.1.2 2018年1月11日
0.1.1 2017年6月11日
0.1.0 2017年6月10日

#1578 in 编码

Download history 1397/week @ 2024-03-14 1043/week @ 2024-03-21 1326/week @ 2024-03-28 1016/week @ 2024-04-04 1336/week @ 2024-04-11 1649/week @ 2024-04-18 1360/week @ 2024-04-25 1250/week @ 2024-05-02 1226/week @ 2024-05-09 1311/week @ 2024-05-16 1040/week @ 2024-05-23 1209/week @ 2024-05-30 1095/week @ 2024-06-06 961/week @ 2024-06-13 1182/week @ 2024-06-20 950/week @ 2024-06-27

4,491 每月下载量
14 个 crate (7 直接) 中使用

MIT/Apache

11KB
53

Structure

使用格式字符串创建强类型数据打包/解包接口(灵感来源于 Python 的 struct 库)。

Build Status Build status Crates.io

文档

安装

将以下内容添加到您的 Cargo.toml

[dependencies]
structure = "0.1"

并将以下内容添加到您的 crate 根目录

#[macro_use]
extern crate structure;

示例

// Two `u32` and one `u8`
let s = structure!("2IB");
let buf: Vec<u8> = s.pack(1, 2, 3)?;
assert_eq!(buf, vec![0, 0, 0, 1, 0, 0, 0, 2, 3]);
assert_eq!(s.unpack(buf)?, (1, 2, 3));

当使用实现 WriteRead 的类型时,使用 pack_intounpack_from 很有用。以下示例展示了如何通过套接字发送 u32u8

use std::net::{TcpListener, TcpStream};
let listener = TcpListener::bind("127.0.0.1:0")?;
let mut client = TcpStream::connect(listener.local_addr()?)?;
let (mut server, _) = listener.accept()?;
let s = structure!("IB");
s.pack_into(&mut client, 1u32, 2u8)?;
let (n, n2) = s.unpack_from(&mut server)?;
assert_eq!((n, n2), (1u32, 2u8));

许可证

根据您的选择,许可协议为

贡献

除非您明确声明,否则您提交的任何有意包含在工作中的贡献将根据上述条款双重许可,没有额外的条款或条件。

依赖关系

~220KB