3 releases
Uses old Rust 2015
0.1.2 | Jan 11, 2018 |
---|---|
0.1.1 | Jun 11, 2017 |
0.1.0 | Jun 10, 2017 |
#1578 in Encoding
4,491 downloads per month
Used in 14 crates
(7 directly)
11KB
53 lines
Structure
Use format strings to create strongly-typed data pack/unpack interfaces (inspired by Python's struct
library).
Installation
Add this to your Cargo.toml
:
[dependencies]
structure = "0.1"
And this to your crate root:
#[macro_use]
extern crate structure;
Examples
// 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));
It's useful to use pack_into
and unpack_from
when using types that implement Write
or Read
.
The following example shows how to send a u32
and a u8
through sockets:
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));
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT) at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you shall be dual licensed as above, without any additional terms or conditions.
Dependencies
~220KB