blob: b5296d7bedbeee8515ca5d60552e875f4f85157b [file] [log] [blame] [view]
# lib/fidl-service
A support library for FIDL service directories.
## Purpose
The purpose of this library is to provide a way to both consume or publish FIDL
service directories. That is, this library provides the building blocks for
developing clients or servers of FIDL service directories.
A FIDL service directory is a way to represent a FIDL service within the
namespace of a process. For example, take the following FIDL service:
```
library fuchsia.examples;
using fidl.examples.echo;
service MyService {
fidl.examples.echo.Echo regular_echo;
fidl.examples.echo.Echo reversed_echo;
};
```
The FIDL service named MyService can be represented within the namespace of a
process with the following structure:
```
/svc/fuchsia.examples.MyService
/svc/fuchsia.examples.MyService/default
/svc/fuchsia.examples.MyService/default/regular
/svc/fuchsia.examples.MyService/default/reversed
/svc/fuchsia.examples.MyService/alternate
/svc/fuchsia.examples.MyService/alternate/regular
/svc/fuchsia.examples.MyService/alternate/reversed
```
Here we can see that `MyService` has two instances, `default` and `alternate`,
and each instance has the members `regular` and `reversed`.
Using this library, we can interact we can interact with FIDL service
directories in code more simply. For example, here is how we would open the
`alternate` instance of `MyService` and bind to the member `regular`:
```
auto alternate = fidl::OpenService<fuchsia::examples::MyService>("alternate");
auto regular = alternate.regular_echo().Connect().Bind();
```
For more examples, please see `//examples/fidl`.
## Dependencies
This library depends on:
* `fuchsia.io` - This is required to use `fuchsia::io::Directory`.
* `lib/async` - This is required to use `async::WaitMethod`.
* `lib/fdio` - This is required to use `fdio_ns_t`.
* `lib/fidl` - This is required to interact with FIDL.
* `lib/vfs` - This required to use `vfs::PseudoDir`.
Generated FIDL service code will depend on this library, and therefore inherit
the same set of dependencies.
Additionally, server processes may want to use `lib/sys` in order to simplify
their implementation.