blob: 89b5b5589fac078ae7c1596ef6cbba4f4a0e9988 [file] [log] [blame] [view]
# FIDL Rust Crates
FIDL is the primary mechanism for structured IPC within Fuchsia. The easiest
way to use FIDL from Rust is by generating a "FIDL crate" from a FIDL library
and then importing it from your Rust library or binary.
See [the FIDL Rust bindings](/docs/reference/fidl/bindings/rust-bindings.md) to
understand how different FIDL constructs map into their Rust equivalents, and
[the FIDL Rust tutorials][tutorials] for examples on using the Rust
bindings.
## Build Instructions {#build}
When a [GN `fidl` rule](/build/fidl/fidl.gni) is defined for a FIDL library,
a corresponding FIDL Rust crate is automatically generated under
the original target name appended with `_rust`. Transitive dependencies on
other FIDL libraries are resolved automatically.
For example, given the declaration:
```gn
# //src/tictactoe/BUILD.gn
fidl("games.tictactoe") { ... }
```
The FIDL crate target is
`//src/tictactoe:games.tictactoe_rust`. To use the FIDL crate,
add the target to the `deps` field of the
[`rustc_*` build rule](/docs/development/languages/rust/README.md#build)
for your Rust crate. For example:
```gn
rustc_binary("tictactoe") {
# ...
deps = ["//src/tictactoe:games.tictactoe_rust"]
}
```
The Rust crate will be named `fidl_games_tictactoe` and its items can now be
imported:
```rust
use fidl_games_tictactoe::BOARD_SIZE;
```
In the Fuchsia tree, frequently used FIDL crates are often aliased to
a shorter name for brevity, like so:
```rust
use fidl_fuchsia_io as fio;
use fidl_fuchsia_data as fdata;
```
## Generated Documentation {#documentation}
Documentation in HTML format can be automatically
generated for a FIDL crate using the `fx rustdoc` command. For example:
```bash
fx rustdoc //src/tictactoe:games.tictactoe_rust --open
```
FIDL crates in the public Fuchsia source tree are published in the
[Fuchsia Rust API reference](https://fuchsia-docs.firebaseapp.com/rust/).
## Generated Rust Code {#code}
To manually inspect the generated Rust code for a FIDL crate, the Rust
source files are available under the `BUILD_DIR/fidling/gen` (refer to the
[Generated code guide][generated-code] for an example). Note that
the FIDL crate must first have been built (e.g. using `fx build`).
<!-- xrefs -->
[generated-code]: /docs/development/languages/fidl/guides/generated-code.md#rust
[tutorials]: /docs/development/languages/fidl/tutorials/rust