前提条件
本教程基于编译 FIDL 教程。对于 完整的 FIDL 教程,请参阅概览。
概览
本教程介绍如何使用
fostr
工具。
如果要自行编写代码,请删除以下目录:
rm -r examples/fidl/hlcpp/fostr farnet/public/lib/fostr/fidl
本教程包含以下步骤:
- 为 FIDL 库定义
fostr_fidl
目标。这将允许调试打印 方法是为每种类型定义一个operator<<
。 - 使用
fostr_fidl
目标。 - 使用格式化程序代码编写示例。
定义 fostr_fidl 目标
在
//src/lib/fostr/fidl
内为 BUILD 文件创建目录:mkdir -p src/lib/fostr/fidl/fuchsia.examples
创建 BUILD 文件:
touch src/lib/fostr/fidl/fuchsia.examples/BUILD.gn
将以下定义添加到 build 文件中:
# Copyright 2020 The Fuchsia Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import("//src/lib/fostr/build/fostr_fidl.gni") fostr_fidl("fuchsia.examples") { fidl_target = "//examples/fidl/fuchsia.examples" }
这定义了 fuchsia.examples
库的 fostr
目标。不限
库的依赖项也需要在 build 文件中指定,
这不适用于本教程,因为它没有依赖项。对于更复杂的
示例,请参考 Fostr fidl
目录中的现有定义。
添加对 fostr_fidl 目标的依赖项
本教程使用的目标库是一个简单的主机测试,
位于 examples/fidl/hlcpp/fostr
。请注意,测试的 BUILD 文件
将 fostr_fidl
目标添加为依赖项:
executable("bin") {
testonly = true
output_name = "fostr_example_test"
sources = [ "main.cc" ]
deps = [
"//examples/fidl/fuchsia.examples:fuchsia.examples_hlcpp",
"//src/lib/fostr/fidl/fuchsia.examples",
"//src/lib/fxl/test:gtest_main",
]
}
所包含的库会自动重载 <<
运算符。路径
基于为其生成的 FIDL 库的名称:
#include <src/lib/fostr/fidl/fuchsia/examples/formatting.h>
使用格式化程序代码编写示例
编写一些占位符测试以显示输出:
TEST(FidlExamples, Bits) {
auto flags = fuchsia::examples::FileMode::READ | fuchsia::examples::FileMode::WRITE;
std::cout << flags << std::endl;
}
TEST(FidlExamples, Enums) {
auto enum_val = fuchsia::examples::LocationType::MUSEUM;
std::cout << enum_val << std::endl;
}
TEST(FidlExamples, Structs) {
fuchsia::examples::Color default_color;
std::cout << default_color << std::endl;
}
TEST(FidlExamples, Unions) {
auto int_val = fuchsia::examples::JsonValue::WithIntValue(1);
std::cout << int_val << std::endl;
}
运行示例
如需运行该示例,请执行以下操作:
将 GN build 配置为包含以下示例:
fx set core.x64 --with //examples/fidl/hlcpp/fostr
运行测试:
fx test -vo fostr-example-test