#byte #swap #lib

bswp

byte swap lib

2 releases (1 stable)

1.0.0 Mar 27, 2020
0.1.0 Mar 24, 2020

#20 in #swap

MIT/Apache

15KB
176 lines

bswp crate bswp documentation GitHub license

Branch Status
master Build Status

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.

No runtime deps