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