Skip to content

tskit-dev/tskit-rust

Folders and files

NameName
Last commit message
Last commit date
Oct 28, 2022
Oct 28, 2022
Oct 28, 2022
Oct 28, 2022
Jul 29, 2022
Jul 16, 2022
Dec 13, 2021
Dec 15, 2020
Oct 28, 2022
Apr 21, 2021
Oct 28, 2022
Apr 21, 2021
Apr 21, 2021
May 19, 2021
Aug 11, 2022
May 1, 2021
Oct 25, 2022
Dec 9, 2020

Repository files navigation

rust bindings for tskit

CI tests

This crate provides rust bindings to tskit.

This package provides the following:

  1. Low-level bindings to the C API of both tskit and kastore. We use bindgen to automatically generate the bindings.
  2. Support for table collections, tree sequences, and tree iteration.
  3. An error handling system that maps tskit error codes to rust errors while preserving error messages.

The overview is:

  1. tskit and kastore C code are include in subprojects/
  2. These two tools are compiled into the rust package.
  3. Then bindgen generates the bindings.
  4. Finally, the entire rust package is generated.

The result is a rust library with all of these two C libraries statically compiled in. Further, rust types and functions exist in the module name tskit::bindings, allowing unsafe access to the low-level API.

Help wanted!

Quick start guide

Cloning the repository and running the test suite

git clone https://github.com/tskit-dev/tskit-rust
cd tskit-rust
cargo test --all-features

Viewing the documentation

cargo doc --all-features --open

Calculating code coverage

First, install tarpaulin:

cargo install cargo-tarpaulin

Then, we use all tests, doc tests, and example programs to calculate code coverage for all available features:

cargo tarpaulin --all-features --doc --tests --examples --exclude-files '*.c' --exclude-files '*.h' --ignore-tests  -o html

Then, point your favorite browser to tarpaulin-report.html.

The last few flags exclude the C code and any rust code that is test-only from being part of the denominator of the coverage calculation. The goal here is not to have high test coverage of the C API, as it is up to the upstream project to provide that.

Note: tarpaulin can be fickle, and changing the order of some of those flags can cause the coverage run to fail.

Change log

See here.