| # Generated code output guide | |
| This document outlines the approaches available for viewing generated FIDL | |
| bindings code. For general information about how FIDL definitions get converted | |
| to target language code, refer to the [bindings reference][bindings-ref]. | |
| ## Viewing generated code | |
| If you would like to look at the generated output for a specific target in the | |
| Fuchsia build, you can first build the target in question, then inspect the | |
| generated files in the build output. The instructions in this section assume | |
| that the target is defined using the standard [`fidl` GN template][fidl-gn], | |
| and that the out directory is at the default path (`out/default`). | |
| ### GN build | |
| The root of the FIDL output in the GN build for a library `fuchsia.examples` defined in | |
| directory `sdk/fidl` is: | |
| out/default/fidling/gen/sdk/fidl/fuchsia.examples | |
| #### HLCPP, LLCPP, and C {#c-family} | |
| The C family bindings are further generated into a `fuchsia/examples` subdirectory, which comes from the library name. From | |
| there: | |
| - HLCPP outputs `cpp/fidl.cc`, `cpp/fidl.h`, and `cpp/fidl_test_base.h`. | |
| - LLCPP outputs `llcpp/fidl.cc` and `llcpp/fidl.h`. | |
| - C outputs `c/fidl.client.c`, `c/fidl.server.c`, and `fidl.h`. | |
| For example, using `fuchsia.io` with the HLCPP bindings creates the | |
| following files: | |
| out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia/io/cpp/fidl.cc | |
| out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia/io/cpp/fidl.h | |
| out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia/io/cpp/fidl_test_base.h | |
| and using `fuchsia.io` with the LLCPP bindings creates the following files: | |
| out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia/io/llcpp/fidl.cc | |
| out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia/io/llcpp/fidl.h | |
| #### Rust {#rust} | |
| The Rust bindings output is contained in a single file in the root directory. | |
| For example, `fuchsia.io` is generated to the following file: | |
| out/default/fidling/gen/sdk/fidl/fuchsia.io/fidl_fuchsia_io.rs | |
| #### Go {#go} | |
| Go bindings are generated into an `impl.go` file located in a subdirectory in | |
| the root directory. For example, building `fuchsia.io` generates the following file: | |
| out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io.fidl/impl.go | |
| #### JSON IR | |
| The JSON IR is generated to the root directory: | |
| out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io.fidl.json | |
| ### Dart {#dart} | |
| The FIDL package for a library named `fuchsia.examples`, defined in the directory | |
| `sdk/fuchsia.examples` is: | |
| out/default/dartlang/gen/sdk/fidl/fuchsia.examples/fuchsia.examples_package | |
| The first instance of `fuchsia.examples` comes from the path, whereas the second | |
| comes from the library name, so the general pattern would be: | |
| out/default/dartlang/gen/[path to FIDL library]/[FIDL library name]_package | |
| Within the package, `lib/fidl_async.dart` contains the bindings code. | |
| `lib/fidl_test.dart` contains utilities for [testing][dart-testing]. | |
| ## Using fidlbolt | |
| For ad hoc examples or existing FIDL files, another option is to use the | |
| `fidlbolt` tool. By pasting the desired FIDL content into fidlbolt, it is | |
| possible to view the output for each binding, as well as for the JSON IR. | |
| `fidlbolt` also supports importing libraries defined in the sdk, so that | |
| the FIDL code can use e.g. `using fuchsia.io;` to refer to IDK libraries. | |
| ## Viewing generated documentation | |
| ### Rust | |
| It is possible to generate documentation for generated Rust bindings using | |
| [`fx rustdoc`][rustdoc]. | |
| <!-- xrefs --> | |
| [bindings-ref]: /docs/reference/fidl/bindings/overview.md | |
| [fidl-gn]: /build/fidl/fidl.gni | |
| [rustdoc]: /docs/development/languages/rust/fidl_crates.md#documentation | |
| [dart-testing]: /docs/reference/fidl/bindings/dart-bindings.md#test-scaffolding |