blob: 3dc3224ffd177f8d394da7426b9852227d734b28 [file] [log] [blame] [view]
Fuchsia Interface Definition Language (FIDL) is the language used to describe
interprocess communication (IPC) protocols used by Fuchsia programs. FIDL
provides a simplified declaration syntax for providers to define interfaces as a
**protocol**. Supported data types include integers, floats, booleans, strings,
and [handles][glossary.handle]. These can be organized into more complex arrays,
vectors, structs, tables, and unions.
Consider the following example FIDL protocol for an `Echo` interface:
```fidl
library fuchsia.examples;
{% includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="examples/fidl/fuchsia.examples/echo.test.fidl" region_tag="max" adjust_indentation="auto" %}
{% includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="examples/fidl/fuchsia.examples/echo.test.fidl" region_tag="echo" adjust_indentation="auto" %}
```
FIDL protocols describe a set of **methods** invoked by sending messages over
a channel. Channel messages are inherently asynchronous, with the sender and
receiver operating independently of each other. FIDL methods introduce
higher-level semantics that enable more idiomatic programming on the client and
server side of a FIDL transaction.
FIDL supports the following method types:
* **Two-way methods:** A typical method call that accepts optional parameters
with a return type defined after the `->` operator. Two-way methods block
until a response is received. In the `Echo` example, the `EchoString()`
method is a two-way method.
* **One-way methods:** Asynchronous method calls that return immediately
without waiting for a response. Methods without a declared return type are
considered one-way from the client. In the `Echo` example, the `SendString()`
method is a one-way method.
* **Events:** When necessary, a server may send unsolicited messages to the
client, called events. Events declare their method name on the return side of
the `->` operator. In the `Echo` example, the `OnString()` method is an event.
Note: For more details on FIDL language syntax and supported types, see the
[FIDL Language specification](/docs/reference/fidl/language/language.md).
[glossary.handle]: /docs/glossary/README.md#handle