#Using FIDL Proxies with Plugins

FFX plugins can communicate with a target device using FIDL through
[Overnet](https://fuchsia.googlesource.com/fuchsia/+/HEAD/src/connectivity/overnet/).

Extending the example from the [plugins](plugins.md) page we can add
FIDL proxies to the parameter list for plugins:

First we add a dependency to the plugin's `BUILD.gn` file:

```GN
import("//src/developer/ffx/build/ffx_plugin.gni")

ffx_plugin("ffx_example") {
  version = "0.1.0"
  edition = "2018"
  with_unit_tests = true
  deps = [
    "//sdk/fidl/fuchsia.device:fuchsia.device-rustc",
  ]
}
```

This makes the FIDL proxy bindings available for import in the
plugin. In this case you can now import `NameProviderProxy`.

```rust
use {
    anyhow::Error,
    ffx_core::ffx_plugin,
    ffx_example_args::ExampleCommand,
    fidl_fuchsia_device::NameProviderProxy,
};

```

Now that the type is imported, the proxy can be used in the plugin
function. FFX plugins can accept proxies in the parameter list:

```rust
#[ffx_plugin(
    NameProviderProxy = "core/appmgr:out:fuchsia.device.NameProvider"
)]
pub async fn example(
    name_proxy: NameProviderProxy,
    _cmd: ExampleCommand,
) -> Result<(), Error> {
    if let Ok(name) = name_proxy.get_device_name().await? {
        println!("Hello, {}", name);
    }
    Ok(())
}
```

In order to correctly connect a proxy to the FIDL service on the
target, you will need to map the proxy type to a component selector
that can be used to find the FIDL service.  More about component
selectors can be found on the [Component Select](component-select.md)
page. This mapping is passed into the ffx_plugin annotation at the top
of the function signature:

```rust
#[ffx_plugin(
    fdevice::NameProviderProxy = "core/appmgr:out:fuchsia.device.NameProvider"
)]
```

And that's it.  The plugin should now be able to communicate with
target device using native FIDL calls.  FFX plugins can accept any
number of plugins as long as the same steps are followed and the
proxies are correctly mapped to component selectors.

There are two exceptions to this rule.  FFX already knows how to
communicate with two proxies without mappings.  It's enough to just
add these proxies to the parameter list without changing the
ffx_plugin annotation:

- [DaemonProxy](https://fuchsia.googlesource.com/fuchsia/+/HEAD/sdk/fidl/fuchsia.developer.bridge/daemon.fidl) - more info can be found [here](daemon.md)
- [Remote Control Service (RCS)](https://fuchsia.googlesource.com/fuchsia/+/HEAD/sdk/fidl/fuchsia.developer.remotecontrol/remote-control.fidl) - more info can be found [here](rcs.md)
