# memoverlay
Puts a writable layer of bytes over some byte stream
# memoverlay
```txt
+-----------------+------------+-----------------+-------+----------------------+-------+-----------------+
+-----------------+ +----------------------+
+-----------------+ +----------------------+
+-------------------+ +---------------------+
+-------------------+ +---------------------+
+---------------------------------------------------------------------------------------------------------+
+---------------------------------------------------------------------------------------------------------+
```
## Usage example
```rust
use std::io::{Cursor, Read, Seek, SeekFrom};
use memoverlay::MemOverlay;
use memoverlay::overlay;
let message1 = "hello, world!";
let mut overlay = overlay!(message1.as_bytes());
overlay.add_bytes_at(7, "peter".as_bytes()).unwrap();
let mut message2 = String::new();
let _ = overlay.read_to_string(&mut message2).unwrap();
overlay.seek(SeekFrom::Start(0)).unwrap();
assert_eq!(message2, "hello, peter!");
overlay.add_bytes_at(1, "a".as_bytes()).unwrap();
let mut message3 = String::new();
let _ = overlay.read_to_string(&mut message3).unwrap();
overlay.seek(SeekFrom::Start(0)).unwrap();
assert_eq!(message3, "hallo, peter!");
overlay.add_bytes_at(1, "o".as_bytes()).unwrap();
overlay.add_bytes_at(5, "w".as_bytes()).unwrap();
let mut message4 = String::new();
let _ = overlay.read_to_string(&mut message4).unwrap();
assert_eq!(message4, "hollow peter!");
```