@@ -439,31 +439,59 @@ server.
439
439
440
440
See the class documentation on these types for more details.
441
441
442
- ### Request and response structs {#request-response-structs}
442
+ ### Request and response types {#request-response-structs}
443
443
444
- FIDL generates a type for each request, response, and event in the protocol by
445
- treating the parameters as struct fields. For example, the ` MakeMoveRequest ` is
446
- generated as if it were a struct with two fields: ` uint8 row ` , and ` uint8 col ` ,
447
- providing the same generated code API as [ regular structs] ( #structs ) :
448
-
449
- ``` c++
450
- struct MakeMoveRequest final {
451
- uint8_t row;
452
- uint8_t col;
453
- }
454
- ```
455
-
456
- For this example, the following types are generated:
444
+ The request type for a FIDL method or event can be accessed through a pair of
445
+ aliases, ` fidl::WireRequest ` and ` fidl::WireEvent ` :
457
446
458
447
* ` fidl::WireRequest<TicTacToe::StartGame> `
459
448
* ` fidl::WireRequest<TicTacToe::MakeMove> `
460
- * `fidl::WireResponse<TicTacToe::MakeMove>`
461
449
* ` fidl::WireEvent<TicTacToe::OnOpponentMove> `
462
450
463
- The naming scheme for requests is `[Method]Request`. The naming scheme for
464
- responses is `[Method]Response`. The naming scheme for events is `[Method]Event`.
451
+ If the type used for the request or event is a named type, the alias will point
452
+ to that type. If the request type was an anonymous type, the alias will point to
453
+ the type name generated for that anonymous type. For both method requests and
454
+ events, the generated request type is named ` [Method]Request ` .
455
+
456
+ Unlike requests, responses to two-way methods are generated as a new type,
457
+ ` fidl::WireResult ` :
458
+
459
+ * ` fidl::WireResult<TicTacToe::MakeMove> `
460
+
461
+ The ` fidl::WireResult ` type inherits from ` fidl::Status ` , and its status tells
462
+ whether the call succeeded at the FIDL layer. If the method has a non-empty
463
+ response or uses FIDL error syntax, the generated ` WireResult ` type will also
464
+ have a set of accessors for accessing the return value or application-layer
465
+ error. The available accessors for the contained result are:
466
+
467
+ * ` WireResultUnwrapType<FidlMethod>* Unwrap() `
468
+ * ` const WireResultUnwrapType<FidlMethod>* Unwrap() const `
469
+ * ` WireResultUnwrapType<FidlMethod>& value() `
470
+ * ` const WireResultUnwrapType<FidlMethod>& value() const `
471
+ * ` WireResultUnwrapType<FidlMethod>* operator->() `
472
+ * ` const WireResultUnwrapType<FidlMethod>* operator->() const `
473
+ * ` WireResultUnwrapType<FidlMethod>& operator*() `
474
+ * ` const WireResultUnwrapType<FidlMethod>& operator*() const `
475
+
476
+ The ` WireResultUnwrapType ` is another type alias, which depends on whether the
477
+ method uses error syntax. Given this example library,
478
+
479
+ ``` fidl
480
+ library response.examples;
481
+
482
+ protocol Test {
483
+ Foo() -> (struct { x int32; });
484
+ Bar() -> () error int32;
485
+ Baz() -> (struct { x int32; }) error int32;
486
+ };
487
+ ```
488
+
489
+ here is what the ` fidl::WireResultUnwrapType ` is for each method in the ` Test `
490
+ protocol:
465
491
466
- Any empty request, response, or event is represented by a `nullptr`.
492
+ * ` fidl::WireResultUnwrapType<response_examples::Test::Foo> = response_examples::wire::TestFooResponse `
493
+ * ` fidl::WireResultUnwrapType<response_examples::Test::Bar> = fit::result<int32_t> `
494
+ * ` fidl::WireResultUnwrapType<response_examples::Test::Baz> = fit::result<int32_t, ::response_examples::wire::TestBazResponse*> `
467
495
468
496
### Client {#client}
469
497
0 commit comments