1 unstable release

0.1.0 Dec 20, 2020

#97 in #edge

MIT license

670KB
18K SLoC

C 17K SLoC // 0.1% comments Rust 755 SLoC // 0.0% comments

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. The struct tskit_rust::TableCollection, which wraps tsk_table_collection_t. The wrapper is currently incomplete, supporting only node, edge, site, mutation, and population tables. The remaining tables will happen "soon".
  3. An error handling system that maps tskit error codes to rust errors while preserving error messages.

The overview is:

  1. tskit and kastore source from tskit 0.3.4 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_rust::bindings, allowing unsafe access to the low-level API.

In the future, we hope to develop a more "rusty" front-end, hiding the unsafe bits from client code.

Help wanted!

Quick start guide

git clone https://github.com/molpopgen/tskit_rust
cd tskit_rust
git submodule update --init --recursive
cargo build
cargo test

Then, to look at the docs:

cargo doc --open

Dependencies

~0.3–2.9MB
~60K SLoC