blob: ab56c58dd1d4af379ee469fdda283160fa3868b3 [file] [log] [blame] [view]
# HLCPP object pretty printing
## Prerequisites
This tutorial builds on the [Compiling FIDL][compiling] tutorial. For the
full set of FIDL tutorials, refer to the [overview][overview].
## Overview
This tutorial walks through how to add debug printing to HLCPP types, using the
[`fostr`][fostr-dir] tool.
If you want to write the code yourself, delete the following directories:
```
rm -r examples/fidl/hlcpp/fostr farnet/public/lib/fostr/fidl
```
This tutorial contains the following steps:
* Define a `fostr_fidl` target for a FIDL library. This will allow debug printing for
types in the library by defining an `operator<<` for each type.
* Use the `fostr_fidl` target.
* Write examples with the formatter code.
## Define fostr_fidl target
1. Create a directory for the BUILD file inside [`//src/lib/fostr/fidl`][fostr-dir]:
```
mkdir -p src/lib/fostr/fidl/fuchsia.examples
```
2. Create the BUILD file:
```
touch src/lib/fostr/fidl/fuchsia.examples/BUILD.gn
```
3. Add the following definition to the build file:
```gn
{% includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="src/lib/fostr/fidl/fuchsia.examples/BUILD.gn" %}
```
This defines a `fostr` target for the `fuchsia.examples` library. Any
dependencies to the library needs to be specified in the build file as well,
which doesn't apply to this tutorial as it has no dependencies. For more complex
examples, refer to the existing definitions in the fostr `fidl` directory.
## Add a dependency on the fostr_fidl target
The target library that the tutorial uses is a simple host test, which is
located in `examples/fidl/hlcpp/fostr`. Notice that the BUILD file for the test
includes the `fostr_fidl` target as a dependency:
```gn
{% includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="examples/fidl/hlcpp/fostr/BUILD.gn" region_tag="bin" highlight="7" %}
```
The included library automatically overloads the `<<` operator. The path
is based on the name of the FIDL library it is generated for:
```c++
{% includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="examples/fidl/hlcpp/fostr/main.cc" region_tag="includes" %}
```
## Write examples using the formatter code
Write some placeholder tests to show off the output:
```cpp
{% includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="examples/fidl/hlcpp/fostr/main.cc" region_tag="tests" %}
```
## Run the example
To run the example:
1. Configure the GN build to include the example:
```
fx set core.x64 --with //examples/fidl/hlcpp/fostr
```
2. Run the test:
```
fx test -vo fostr-example-test
```
<!-- xrefs -->
[compiling]: /docs/development/languages/fidl/tutorials/fidl.md
[fostr-dir]: /src/lib/fostr/fidl
[overview]: /docs/development/languages/fidl/tutorials/overview.md