# Hexd
A simple, configurable and dependency-free hexdump library for Rust.
## Installation
```
cargo install hxd
```
## Examples
Any slice of bytes [can be dumped](AsHexd) with a single line:
```rust
use hxd::AsHexd;
let msg = b"Hello, world! Hopefully you're seeing this in hexd...";
msg.hexd().dump();
// 00000020: 6565 696E 6720 7468 6973 2069 6E20 6865 |eeing this in he|
// 00000030: 7864 2E2E 2E |xd... |
```
Any iterator that yields bytes can be consumed and dumped as well:
```rust
use hxd::IntoHexd;
let msg = b"Hello, world! Hopefully you're seeing this in hexd...";
let iter = msg.into_iter().map(|u| *u + 1);
iter.hexd().dump();
// 00000020: 6666 6A6F 6821 7569 6A74 216A 6F21 6966 |ffjoh!uijt!jo!if|
// 00000030: 7965 2F2F 2F |ye/// |
```
[Options](options::HexdOptions) are configurable via a [fluent interface](options::HexdOptionsBuilder):
```rust
use hxd::{AsHexd, options::HexdOptionsBuilder, options::{GroupSize, Spacing}};
let v = (0..0x80).collect::<Vec<u8>>();
v.hexd()
.grouped((GroupSize::Int, Spacing::None), (4, Spacing::Normal))
.uppercase(false)
.range(0x45..0x7b)
.relative_offset(0xff0000)
.dump();
// 00ff0060: 60616263 64656667 68696a6b 6c6d6e6f |`abcdefghijklmno|
// 00ff0070: 70717273 74757677 78797a |pqrstuvwxyz |
```
Hexdumps can be [written](writer::WriteHexdump) to a variety of targets out of the box:
```rust
use hxd::{AsHexd, options::HexdOptionsBuilder};
use std::{fs::{OpenOptions, File}, net::TcpStream};
let v = vec![0u8; 16];
let f = OpenOptions::new()
.write(true)
.open("hexdump.txt")
.unwrap();
let tcp_stream = TcpStream::connect("127.0.0.1:9000").unwrap();
v.hexd().dump();
v.hexd().dump_err();
v.hexd().dump_to::<String>();
v.hexd().dump_to::<Vec<u8>>();
v.hexd().dump_into(f).unwrap();
v.hexd().dump_io(tcp_stream).unwrap();
```
All primitive integer types can be dumped with sensible display defaults:
```rust
use hxd::{AsHexdGrouped, options::Endianness};
vec![0x6120u16; 8].as_hexd(Endianness::LittleEndian).dump();
vec![0x7fa06120i32; 4].as_hexd_be().dump();
// 00000000: 7FA06120 7FA06120 7FA06120 7FA06120 |..a ..a ..a ..a |
vec![0xff3007fa06120u64; 2].as_hexd_le().dump();
vec![0x7fa06120u128; 1].as_hexd_be().dump();
// 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 7F A0 61 20 |..............a |
```