zip_parser 0.3.0

A zip file format parser, supporting no_std environment, stream parsing and seeking.
Documentation
# zip_parser

Zip file format parser implemented by rust, supports stream parsing, `no_std` environment.

The [`Parser`] will search central directory at the end of zip file if [`Seek`] is available.
Also, It supports sequence read parsing when [`Seek`] is not available.
All types in std env implemented `std::io::Read` automatically implement [`Read`], and so is the trait [`Seek`].

### stream parsing
```rust
use zip_parser as zip;
use zip::prelude::*;

#[cfg(feature = "std")]
fn parse<S: zip::Read + zip::Seek>(parser: Parser<S>) {
    for (i, mut file) in parser.enumerate() {
        println!("{}: {}({} Bytes)", i, unsafe { file.file_name() }, file.file_size());
        let mut buf = Vec::new();
        buf.resize(file.file_size() as usize, 0);
        if let Ok(n) = file.read(&mut buf) {
            println!("Data: {:02X?}", &buf[..n]);
        } else {
            println!("read failed");
        }
        println!();
    }
}

#[cfg(feature = "std")]
fn stdin_parsing() {
    println!("*** get stream from stdin ***");
    parse(Parser::new(std::io::stdin().lock()))
}
```
You just need to pass a stream which implements [`Read`] into the [`Parser::new()`](struct.Parser.html#method.new),
then you can iterate over it. For more detail, see example `stream_parsing`.

### Example
#### Stream_parsing
1. From `stdin`
    ```bash
    cat test.zip | cargo run --features="std" --example stream_parsing
    ```
    or even you can cat multiple zip files:
    ```bash
    cat test.zip test.zip | cargo run --features="std" --example stream_parsing
    ```
1. From file
    ```bash
    cargo run --features="std" --example stream_parsing -- test.zip
    ```

License: MIT