# cargo-wheel
Use milksnake and cbindgen to generate python binding to your Rust crate.
## Quick start
Edit your `Cargo.toml` and set the crate type to `cdylib`
```toml
[lib]
crate-type = ["cdylib"]
```
Export functions or datastructures in your library to make them visible to `C`.
```rust
#[no_mangle]
pub extern fn greet() {
println!("Hello from Rust");
}
```
Call `cargo wheel` to invoke cbindgen and set up a python package.
```bash
cargo wheel
```
Use `cffi` in the generated `__init__.py` to expose the functionality to python
```python
from test_lib._native import ffi, lib
def greet():
lib.greet()
```
## Why you want to use cargo-wheel
To save boilerplate if creating python bindings for a Rust crate
## Why you do not want to use cargo wheel
Scenarios where you want to invoke `cargo` from your `setup.py` rather than the other way around.
E.g. If you want to replace python code with Rust in an existing wheel.