# Design
## Including the `tskit` `C` code.
We manually copy the source files from the current stable release.
We cannot use submodules because the `tskit` repository contains symbolic links, which causes problems with `bindgen`.
## Key principles
* Don't reinvent the wheel.
If there is a `C` function in place, call it.
Calling existing functions takes advantage of the high test coverage of `tskit`.
* Prefer rust idioms where possible.
For example, provide iterator types instead of manual `next/advance` functions.
See how `NodeIterator` works by looking in `src/traits.rs` and `src/trees.ts` for an example of a reusable iterator pattern.