binny ======= A general purpose library for parsing common binary file formats such as mp3, wav, jpeg, etc. ## About `binny` is used to parse and valid common binary file formats from a supplied `Read` trait. The file is either parsed into a struct that represents the physical structure of the file, such as a file header, meta data, or contents of the file used for encoding information assuming a valid file is being parsed. If the file being parsed is invalid, a enumerated error is returned that details any violations of said file's format. `binny` is not a decoder, rather it handles the step of parsing a file that is a prerequisite of decoding. The task of decoding a file is left up to other libraries or methods. ## Usage To use `binny` in your project, simply add `binny` to your project's `Cargo.toml` file like so: ```toml [dependencies] binny = "0.1.0" ``` ## Roadmap The following is the list of features and functionality on the roadmap for `binny`'s development: * `mp3` parsing and validation support * tutorial section in the project's documentation * `wav` parsing and validation support * `flac` parsing and validation support * `jpeg` parsing and validation support * `png` parsing and validation support * `gif` parsing and validation support * `tiff` parsing and validation support * `bmp` parsing and validation ## License `binny` is free and open source software licensed under version 3.0 of the GNU Lesser General Public License. For further details please refer to the `COPYING` file or [here](https://www.gnu.org/licenses/lgpl-3.0.en.html). ## How to Contribute ### Compatibility `binny` takes semantic version seriously and so many of the guidelines and policies surrounding contributing are focused on avoiding braking changes. `binny` will pin the minimum required version of Rust to the CI builds. This means that bumping the minimum required version Rust will result in the *minor* version being bumped since a requirement for a newer version of Rust is a breaking change. `binny` will officially support the current stable version of Rust and the two previous releases but it may be compatibility with prior releases is not guaranteed. ### Documentation Contributions should be sufficiently documented. This a docstring for all callables, modules, and traits. All ### Testing Contributions should have accompanying unit tests for individual components and integration tests for any API that is formed via publicly accessible members. ### Git Branching This project follows the GitFlow branching strategy. In short the `master` branch should always match a tagged release of the project. The `development` branch should only contain the aggregate of development that is staged for the next release. The `master` and `development` branches should never be committed to directly, rather than should be merged into via a pull request. Changes should only be directly committed via a `feature` branch for new features, an `enhancement` branch for enhancements to existing features, or via a `bugfix` branch for bug fixes. See the this [blog post](https://nvie.com/posts/a-successful-git-branching-model/) for a more detailed explanation on GitFlow.