本页面适用于希望更好地了解 FFX 插件系统的开发者。FFX 基于 argh crate 构建。此 crate 为 CLI 参数制定了 Google 标准。而 argh 期望定义 CLI 参数的结构在编译时是必需的。因此,这会排除所有运行时插件系统,因为 Rust 结构体在编译后无法修改。
这也意味着,任何添加插件的动态功能都必须在编译之前提供。为此,FFX 使用 GN 构建规则从提供的插件依赖项生成最终参数参数结构。您可以点击此处查看该代码。
插件可以访问整个 argh 结构。例如,配置插件需要访问“--config”标志,该标志是 ffx_args
库的一部分:
fx ffx --config "config-test=runtime" config get --name config-test
这意味着需要将生成的最终参数结构提供给这些插件。因此,ffx_plugin
模板会生成两个库:
<target_name>_args
:包含提供给 CLI 的已解析参数。<target_name>_args_test
:包含当args_with_unit_tests
设置为true
时,_args
库生成的所有单元测试。
开发者用来修饰代码的 Rust 属性也会在编译时生成一些代码。
ffx_command
属性只需在 <target_name>_args
库中创建以下代码:
pub type FfxPluginCommand = <Your Command>;
这为库提供了一个已知的入口点,FFX 可以使用该入口点,同时让开发者能够随意为其命令命名。
ffx_plugin
属性会执行类似操作。
pub async fn ffx_plugin_impl(<Your methods inputs>) -> Result<()> {
<Your method name>(<Your parameter names>).await
}