# ISO9660 Simple
It's a Rust crate that provides minimal ISO9660 images reading and parsing functionality.
# To Do
- [x] Rock Ridge extension support
- [x] Joliet extension support
# Usage
Firstly, add `iso9660_simple` to your project:
```bash
cargo add iso9660_simple
```
Then, implement reading device trait for your device (it may be a real device, or just a file).
The complete implementation of reading device trait for file looks like this:
```rust
use std::fs::File;
use iso9660_simple::Read as ISORead;
struct FileDevice(File);
impl ISORead for FileDevice {
fn read(&mut self, position: usize, buffer: &mut [u8]) -> Option<()> {
if self.0.seek(SeekFrom::Start(position as u64)).is_err() {
return None;
}
if self.0.read_exact(buffer).is_ok() {
Some(())
} else {
None
}
}
}
```
Then, you're ready to open the device and make ISO9660 reader from it.
For example:
```rust
let device = FileDevice(File::open("image.iso").unwrap());
let mut iso = ISO9660::from_device(device);
```
And now, you can do parse an ISO9660 file:
```rust
let root_directory_lba = iso.root().lba.get();
let data = iso.read_directory(root_directory_lba); // Read root directory
let first_file = data.first().unwrap(); // Get first file info
let mut buffer = vec![0u8; first_file.file_size()];
let data = iso.read_file(fist_file, 0, &mut buffer); // Read the whole file into Vec<u8>.
```