[](https://crates.io/crates/extended-htslib)
[](https://crates.io/crates/extended-htslib)
[](https://crates.io/crates/extended-htslib)
[](https://docs.rs/extended-htslib)
# HTSlib bindings for Rust
This library provides extended HTSlib bindings and a high level Rust API for reading and writing BAM files. It's an improved version of [rust-hstlib](https://github.com/rust-bio/rust-hstlib).
To clone this repository, issue
```shell
$ git clone --recursive https://src.koda.cnrs.fr/imgt-igh/extended-rustlib
```
ensuring that the HTSlib submodule is fetched, too.
If you only want to use the library, there is no need to clone the repository. Go on to the **Usage** section in this case.
## Requirements
rust-htslib comes with pre-built bindings to htslib for Mac and Linux. You will need a C toolchain compatible with the `cc` crate. The build script for this crate will automatically build a link htslib.
## Usage
Add this to your `Cargo.toml`:
```toml
[dependencies]
extended-htslib = "*"
```
By default `rust-htslib` links to `bzip2-sys` and `lzma-sys` for full CRAM support. If you do not need CRAM support, or you do need to support CRAM files
with these compression methods, you can deactivate these features to reduce you dependency count:
```toml
[dependencies]
extended-htslib = { version = "*", default-features = false }
```
`extended-htslib` has optional support for `serde`, to allow (de)serialization of `bam::Record` via any serde-supported format.
Http access to files is available with the `curl` feature.
Beta-level S3 and Google Cloud Storge support is available with the `s3` and `gcs` features.
`extended-htslib` can optionally use `bindgen` to generate bindings to htslib. This can slow down the build substantially. Enabling the `bindgen` feature will
cause `hts-sys` to use a create a binding file for your architecture. Pre-built bindings are supplied for Mac and Linux. The `bindgen` feature on Windows is untested - please file a bug if you need help.
```toml
[dependencies]
extended-htslib = { version = "*", features = ["serde_feature"] }
```
For more information, please see the [docs](https://docs.rs/rust-htslib).
# Alternatives
There's [noodles](https://github.com/zaeleus/noodles) by [Michael Macias](https://github.com/zaeleus) which implements a large part of htslib's C functionality in pure Rust (still experimental though).
# Authors
* [Guilhem Zeitoun](https://src.koda.cnrs.fr/guilhem.zeitoun)
For contributors of the original crate, see [here](https://github.com/rust-bio/rust-htslib/graphs/contributors).
## License
Licensed under the MIT license https://opensource.org/licenses/MIT. This project may not be copied, modified, or distributed except according to those terms.
Some test files are taken from https://github.com/samtools/htslib.