Expand description
A library for implementing FIDL servers.
This crate allows you to implement a FIDL server by writing a single function that handles an incoming request.
§Example
The easiest approach is to call serve_detached
with a request stream and a
handler function. This will spawn a background task for each client and
automatically log errors:
fs.dir("svc").add_fidl_service(|stream: LogRequestStream| {
serve_detached(stream, |request| {
let LogRequest::Log { message } = request;
info!(message);
Ok(())
});
});
You can also run a server in the current task with serve
. In this case,
you need to deal with the returned error yourself:
if let Err(err) = serve(stream, handler).await {
error!("{:?}", err);
}
Instead of passing a function, you can also pass any object that implements
the RequestHandler
trait. For example:
struct LogHandler;
impl RequestHandler<LogMarker> for LogHandler {
fn handle_request(&self, request: LogRequest) -> Result<(), Error> {
let LogRequest::Log { message } = request;
info!(message);
Ok(())
}
}
// Somewhere else...
fs.dir("svc").add_fidl_service(|stream: LogRequestStream| {
serve_detached(stream, LogHandler);
});
For asynchronous request handling you can alternatively use the following:
* `AsyncRequestHandler`
* `serve_async`
* `serve_async_detached`.
Traits§
- AsyncRequestHandler handles incoming FIDL requests asynchronously.
- RequestHandler handles incoming FIDL requests.
Functions§
- Serves all requests on
stream
usinghandler
. - Serves all requests on
stream
usinghandler
. - Serves all requests on
stream
concurrently usinghandler
. - Runs the server in the background and logs the error if one occurs.
- Runs the server in the background and logs the error if one occurs.