3 个版本
使用旧的 Rust 2015
0.1.2 | 2018年1月11日 |
---|---|
0.1.1 | 2017年6月11日 |
0.1.0 | 2017年6月10日 |
#1578 in 编码
4,491 每月下载量
在 14 个 crate (7 直接) 中使用
11KB
53 行
Structure
使用格式字符串创建强类型数据打包/解包接口(灵感来源于 Python 的 struct
库)。
安装
将以下内容添加到您的 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));
当使用实现 Write
或 Read
的类型时,使用 pack_into
和 unpack_from
很有用。以下示例展示了如何通过套接字发送 u32
和 u8
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));
许可证
根据您的选择,许可协议为
- Apache License, Version 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
贡献
除非您明确声明,否则您提交的任何有意包含在工作中的贡献将根据上述条款双重许可,没有额外的条款或条件。
依赖关系
~220KB