# Introduction

**[`bindgen`](https://github.com/rust-lang-nursery/rust-bindgen) automatically generates Rust
FFI bindings to C and C++ libraries.**

For example, given the C header `cool.h`:

```c
typedef struct CoolStruct {
    int x;
    int y;
} CoolStruct;

void cool_function(int i, char c, CoolStruct* cs);
```

`bindgen` produces Rust FFI code allowing you to call into the `cool` library's
functions and use its types:

```rust
/* automatically generated by rust-bindgen */

#[repr(C)]
pub struct CoolStruct {
    pub x: ::std::os::raw::c_int,
    pub y: ::std::os::raw::c_int,
}

extern "C" {
    pub fn cool_function(i: ::std::os::raw::c_int,
                         c: ::std::os::raw::c_char,
                         cs: *mut CoolStruct);
}
```
