2 releases (1 stable)
1.0.0 | Mar 27, 2020 |
---|---|
0.1.0 | Mar 24, 2020 |
#21 in #swap
15KB
176 lines
Branch | Status |
---|---|
master |
BSWP
Rust Byte Swap lib.
Swap bytes using patterns and masks.
Minimum Supported Rust Version (MSRV)
bswp
requires Rust 1.40.0.
Usage
Iterators
use bswp::pattern::{Pattern, Predicate, swap_iter};
let pattern = Pattern::new(0x42).with_mask(0xFF); // replace byte by 0x42
let predicate = Predicate::new().with_periodicity(2).with_offset(1); // replace odd bytes
let swaps = &[(pattern, predicate)];
let source: [u8; 4] = [0x41, 0x41, 0x41, 0x41];
let swapped = swap_iter(&source, swaps); // iterator on result
let swapped: Vec<u8> = swapped.collect();
assert_eq!(swapped, vec!(0x41, 0x42, 0x41, 0x42));
Mutating File-like Data
use std::io::Cursor;
use bswp::pattern::{Pattern, Predicate};
use bswp::io::swap_io;
// in memory reader (implements `Read`)
let mut reader: Cursor<Vec<u8>> = Cursor::new(vec![0x41, 0x42, 0x43, 0x44]);
// in memory writer (implements `Write`)
let mut writer: Cursor<Vec<u8>> = Cursor::new(Vec::new());
let swaps: &[(Pattern, Predicate)] = &[(Pattern::new(0x42).with_mask(0xFF), Predicate::new().with_periodicity(2).with_offset(0))];
let swap = swap_io(&mut reader, &mut writer, swaps);
assert!(swap.is_ok());
assert_eq!(swap.unwrap(), 4); // 4 bytes written
assert_eq!(writer.into_inner(), vec![0x42, 0x42, 0x42, 0x44])
Changelog
Please see the CHANGELOG for a release history.