112a9d9c8Sopenharmony_ci# Introduction
212a9d9c8Sopenharmony_ci
312a9d9c8Sopenharmony_ci**[`bindgen`](https://github.com/rust-lang/rust-bindgen) automatically generates Rust
412a9d9c8Sopenharmony_ciFFI bindings to C and C++ libraries.**
512a9d9c8Sopenharmony_ci
612a9d9c8Sopenharmony_ciFor example, given the C header `cool.h`:
712a9d9c8Sopenharmony_ci
812a9d9c8Sopenharmony_ci```c
912a9d9c8Sopenharmony_citypedef struct CoolStruct {
1012a9d9c8Sopenharmony_ci    int x;
1112a9d9c8Sopenharmony_ci    int y;
1212a9d9c8Sopenharmony_ci} CoolStruct;
1312a9d9c8Sopenharmony_ci
1412a9d9c8Sopenharmony_civoid cool_function(int i, char c, CoolStruct* cs);
1512a9d9c8Sopenharmony_ci```
1612a9d9c8Sopenharmony_ci
1712a9d9c8Sopenharmony_ci`bindgen` produces Rust FFI code allowing you to call into the `cool` library's
1812a9d9c8Sopenharmony_cifunctions and use its types:
1912a9d9c8Sopenharmony_ci
2012a9d9c8Sopenharmony_ci```rust
2112a9d9c8Sopenharmony_ci/* automatically generated by rust-bindgen 0.99.9 */
2212a9d9c8Sopenharmony_ci
2312a9d9c8Sopenharmony_ci#[repr(C)]
2412a9d9c8Sopenharmony_cipub struct CoolStruct {
2512a9d9c8Sopenharmony_ci    pub x: ::std::os::raw::c_int,
2612a9d9c8Sopenharmony_ci    pub y: ::std::os::raw::c_int,
2712a9d9c8Sopenharmony_ci}
2812a9d9c8Sopenharmony_ci
2912a9d9c8Sopenharmony_ciextern "C" {
3012a9d9c8Sopenharmony_ci    pub fn cool_function(i: ::std::os::raw::c_int,
3112a9d9c8Sopenharmony_ci                         c: ::std::os::raw::c_char,
3212a9d9c8Sopenharmony_ci                         cs: *mut CoolStruct);
3312a9d9c8Sopenharmony_ci}
3412a9d9c8Sopenharmony_ci```
35