[TOC]

# fidl.test.protocols


## **PROTOCOLS**

## ChannelProtocol {#ChannelProtocol}
*Defined in [fidl.test.protocols/protocols.test.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/master:tools/fidl/fidlc/testdata/protocols.test.fidl;l=40)*


### EventA {#fidl.test.protocols/ChannelProtocol.EventA}




#### Response
<table>
    <tr><th>Name</th><th>Type</th></tr>
    <tr>
            <td><code>a</code></td>
            <td>
                <code>int64</code>
            </td>
        </tr><tr>
            <td><code>b</code></td>
            <td>
                <code>int64</code>
            </td>
        </tr></table>

### MethodA {#fidl.test.protocols/ChannelProtocol.MethodA}


#### Request
<table>
    <tr><th>Name</th><th>Type</th></tr>
    <tr>
            <td><code>a</code></td>
            <td>
                <code>int64</code>
            </td>
        </tr><tr>
            <td><code>b</code></td>
            <td>
                <code>int64</code>
            </td>
        </tr></table>



### MethodB {#fidl.test.protocols/ChannelProtocol.MethodB}


#### Request
<table>
    <tr><th>Name</th><th>Type</th></tr>
    <tr>
            <td><code>a</code></td>
            <td>
                <code>int64</code>
            </td>
        </tr><tr>
            <td><code>b</code></td>
            <td>
                <code>int64</code>
            </td>
        </tr></table>


#### Response
<table>
    <tr><th>Name</th><th>Type</th></tr>
    <tr>
            <td><code>result</code></td>
            <td>
                <code>int64</code>
            </td>
        </tr></table>

### MutateSocket {#fidl.test.protocols/ChannelProtocol.MutateSocket}


#### Request
<table>
    <tr><th>Name</th><th>Type</th></tr>
    <tr>
            <td><code>a</code></td>
            <td>
                <code>handle&lt;socket&gt;</code>
            </td>
        </tr></table>


#### Response
<table>
    <tr><th>Name</th><th>Type</th></tr>
    <tr>
            <td><code>b</code></td>
            <td>
                <code>handle&lt;socket&gt;</code>
            </td>
        </tr></table>

### TakeHandle {#fidl.test.protocols/ChannelProtocol.TakeHandle}


#### Request
<table>
    <tr><th>Name</th><th>Type</th></tr>
    <tr>
            <td><code>h</code></td>
            <td>
                <code>handle&lt;handle&gt;</code>
            </td>
        </tr></table>


#### Response
<table>
    <tr><th>Name</th><th>Type</th></tr>
    </table>

## DiscoverableProtocol {#DiscoverableProtocol}
*Defined in [fidl.test.protocols/protocols.test.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/master:tools/fidl/fidlc/testdata/protocols.test.fidl;l=60)*


### Method {#fidl.test.protocols/DiscoverableProtocol.Method}


#### Request
<table>
    <tr><th>Name</th><th>Type</th></tr>
    </table>



## Transitional {#Transitional}
*Defined in [fidl.test.protocols/protocols.test.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/master:tools/fidl/fidlc/testdata/protocols.test.fidl;l=48)*


### Event {#fidl.test.protocols/Transitional.Event}




#### Response
<table>
    <tr><th>Name</th><th>Type</th></tr>
    <tr>
            <td><code>x</code></td>
            <td>
                <code>int64</code>
            </td>
        </tr></table>

### OneWay {#fidl.test.protocols/Transitional.OneWay}


#### Request
<table>
    <tr><th>Name</th><th>Type</th></tr>
    <tr>
            <td><code>x</code></td>
            <td>
                <code>int64</code>
            </td>
        </tr></table>



### Request {#fidl.test.protocols/Transitional.Request}


#### Request
<table>
    <tr><th>Name</th><th>Type</th></tr>
    <tr>
            <td><code>x</code></td>
            <td>
                <code>int64</code>
            </td>
        </tr></table>


#### Response
<table>
    <tr><th>Name</th><th>Type</th></tr>
    <tr>
            <td><code>y</code></td>
            <td>
                <code>int64</code>
            </td>
        </tr></table>

## WithAndWithoutRequestResponse {#WithAndWithoutRequestResponse}
*Defined in [fidl.test.protocols/protocols.test.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/master:tools/fidl/fidlc/testdata/protocols.test.fidl;l=17)*


### NoRequestEmptyResponse {#fidl.test.protocols/WithAndWithoutRequestResponse.NoRequestEmptyResponse}


#### Request
<table>
    <tr><th>Name</th><th>Type</th></tr>
    </table>


#### Response
<table>
    <tr><th>Name</th><th>Type</th></tr>
    </table>

### NoRequestNoResponse {#fidl.test.protocols/WithAndWithoutRequestResponse.NoRequestNoResponse}


#### Request
<table>
    <tr><th>Name</th><th>Type</th></tr>
    </table>



### NoRequestWithResponse {#fidl.test.protocols/WithAndWithoutRequestResponse.NoRequestWithResponse}


#### Request
<table>
    <tr><th>Name</th><th>Type</th></tr>
    </table>


#### Response
<table>
    <tr><th>Name</th><th>Type</th></tr>
    <tr>
            <td><code>ret</code></td>
            <td>
                <code>string</code>
            </td>
        </tr></table>

### OnEmptyResponse {#fidl.test.protocols/WithAndWithoutRequestResponse.OnEmptyResponse}




#### Response
<table>
    <tr><th>Name</th><th>Type</th></tr>
    </table>

### OnWithResponse {#fidl.test.protocols/WithAndWithoutRequestResponse.OnWithResponse}




#### Response
<table>
    <tr><th>Name</th><th>Type</th></tr>
    <tr>
            <td><code>ret</code></td>
            <td>
                <code>string</code>
            </td>
        </tr></table>

### WithRequestEmptyResponse {#fidl.test.protocols/WithAndWithoutRequestResponse.WithRequestEmptyResponse}


#### Request
<table>
    <tr><th>Name</th><th>Type</th></tr>
    <tr>
            <td><code>arg</code></td>
            <td>
                <code>string</code>
            </td>
        </tr></table>


#### Response
<table>
    <tr><th>Name</th><th>Type</th></tr>
    </table>

### WithRequestNoResponse {#fidl.test.protocols/WithAndWithoutRequestResponse.WithRequestNoResponse}


#### Request
<table>
    <tr><th>Name</th><th>Type</th></tr>
    <tr>
            <td><code>arg</code></td>
            <td>
                <code>string</code>
            </td>
        </tr></table>



### WithRequestWithResponse {#fidl.test.protocols/WithAndWithoutRequestResponse.WithRequestWithResponse}


#### Request
<table>
    <tr><th>Name</th><th>Type</th></tr>
    <tr>
            <td><code>arg</code></td>
            <td>
                <code>string</code>
            </td>
        </tr></table>


#### Response
<table>
    <tr><th>Name</th><th>Type</th></tr>
    <tr>
            <td><code>ret</code></td>
            <td>
                <code>string</code>
            </td>
        </tr></table>

## WithErrorSyntax {#WithErrorSyntax}
*Defined in [fidl.test.protocols/protocols.test.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/master:tools/fidl/fidlc/testdata/protocols.test.fidl;l=33)*


### ErrorAsEnum {#fidl.test.protocols/WithErrorSyntax.ErrorAsEnum}


#### Request
<table>
    <tr><th>Name</th><th>Type</th></tr>
    </table>


#### Response
<table>
    <tr><th>Name</th><th>Type</th></tr>
    <tr>
            <td><code>result</code></td>
            <td>
                <code><a class='link' href='#WithErrorSyntax_ErrorAsEnum_Result'>WithErrorSyntax_ErrorAsEnum_Result</a></code>
            </td>
        </tr></table>

### ErrorAsPrimitive {#fidl.test.protocols/WithErrorSyntax.ErrorAsPrimitive}


#### Request
<table>
    <tr><th>Name</th><th>Type</th></tr>
    </table>


#### Response
<table>
    <tr><th>Name</th><th>Type</th></tr>
    <tr>
            <td><code>result</code></td>
            <td>
                <code><a class='link' href='#WithErrorSyntax_ErrorAsPrimitive_Result'>WithErrorSyntax_ErrorAsPrimitive_Result</a></code>
            </td>
        </tr></table>

### ResponseAsStruct {#fidl.test.protocols/WithErrorSyntax.ResponseAsStruct}


#### Request
<table>
    <tr><th>Name</th><th>Type</th></tr>
    </table>


#### Response
<table>
    <tr><th>Name</th><th>Type</th></tr>
    <tr>
            <td><code>result</code></td>
            <td>
                <code><a class='link' href='#WithErrorSyntax_ResponseAsStruct_Result'>WithErrorSyntax_ResponseAsStruct_Result</a></code>
            </td>
        </tr></table>



## **STRUCTS**

### WithErrorSyntax_ErrorAsEnum_Response {#WithErrorSyntax_ErrorAsEnum_Response}
*Defined in [fidl.test.protocols/protocols.test.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/master:tools/fidl/fidlc/testdata/protocols.test.fidl;l=36)*



<table>
    <tr><th>Name</th><th>Type</th><th>Description</th><th>Default</th></tr>
</table>

### WithErrorSyntax_ErrorAsPrimitive_Response {#WithErrorSyntax_ErrorAsPrimitive_Response}
*Defined in [fidl.test.protocols/protocols.test.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/master:tools/fidl/fidlc/testdata/protocols.test.fidl;l=35)*



<table>
    <tr><th>Name</th><th>Type</th><th>Description</th><th>Default</th></tr>
</table>

### WithErrorSyntax_ResponseAsStruct_Response {#WithErrorSyntax_ResponseAsStruct_Response}
*Defined in [fidl.test.protocols/protocols.test.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/master:tools/fidl/fidlc/testdata/protocols.test.fidl;l=34)*



<table>
    <tr><th>Name</th><th>Type</th><th>Description</th><th>Default</th></tr><tr id="WithErrorSyntax_ResponseAsStruct_Response.a">
            <td><code>a</code></td>
            <td>
                <code>int64</code>
            </td>
            <td></td>
            <td>No default</td>
        </tr><tr id="WithErrorSyntax_ResponseAsStruct_Response.b">
            <td><code>b</code></td>
            <td>
                <code>int64</code>
            </td>
            <td></td>
            <td>No default</td>
        </tr><tr id="WithErrorSyntax_ResponseAsStruct_Response.c">
            <td><code>c</code></td>
            <td>
                <code>int64</code>
            </td>
            <td></td>
            <td>No default</td>
        </tr>
</table>



## **ENUMS**

### ErrorEnun {#ErrorEnun}
Type: <code>uint32</code>

*Defined in [fidl.test.protocols/protocols.test.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/master:tools/fidl/fidlc/testdata/protocols.test.fidl;l=28)*



<table>
    <tr><th>Name</th><th>Value</th><th>Description</th></tr><tr id="ErrorEnun.ERR_FOO">
            <td><code>ERR_FOO</code></td>
            <td><code>1</code></td>
            <td></td>
        </tr><tr id="ErrorEnun.ERR_BAR">
            <td><code>ERR_BAR</code></td>
            <td><code>2</code></td>
            <td></td>
        </tr></table>

### obj_type {#obj_type}
Type: <code>uint32</code>

*Defined in [fidl.test.protocols/protocols.test.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/master:tools/fidl/fidlc/testdata/protocols.test.fidl;l=6)*



<table>
    <tr><th>Name</th><th>Value</th><th>Description</th></tr><tr id="obj_type.NONE">
            <td><code>NONE</code></td>
            <td><code>0</code></td>
            <td></td>
        </tr><tr id="obj_type.SOCKET">
            <td><code>SOCKET</code></td>
            <td><code>14</code></td>
            <td></td>
        </tr></table>





## **UNIONS**

### WithErrorSyntax_ErrorAsEnum_Result {#WithErrorSyntax_ErrorAsEnum_Result}
*Defined in [fidl.test.protocols/protocols.test.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/master:tools/fidl/fidlc/testdata/protocols.test.fidl;l=36)*


<table>
    <tr><th>Name</th><th>Type</th><th>Description</th></tr><tr id="WithErrorSyntax_ErrorAsEnum_Result.response">
            <td><code>response</code></td>
            <td>
                <code><a class='link' href='#WithErrorSyntax_ErrorAsEnum_Response'>WithErrorSyntax_ErrorAsEnum_Response</a></code>
            </td>
            <td></td>
        </tr><tr id="WithErrorSyntax_ErrorAsEnum_Result.err">
            <td><code>err</code></td>
            <td>
                <code><a class='link' href='#ErrorEnun'>ErrorEnun</a></code>
            </td>
            <td></td>
        </tr></table>

### WithErrorSyntax_ErrorAsPrimitive_Result {#WithErrorSyntax_ErrorAsPrimitive_Result}
*Defined in [fidl.test.protocols/protocols.test.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/master:tools/fidl/fidlc/testdata/protocols.test.fidl;l=35)*


<table>
    <tr><th>Name</th><th>Type</th><th>Description</th></tr><tr id="WithErrorSyntax_ErrorAsPrimitive_Result.response">
            <td><code>response</code></td>
            <td>
                <code><a class='link' href='#WithErrorSyntax_ErrorAsPrimitive_Response'>WithErrorSyntax_ErrorAsPrimitive_Response</a></code>
            </td>
            <td></td>
        </tr><tr id="WithErrorSyntax_ErrorAsPrimitive_Result.err">
            <td><code>err</code></td>
            <td>
                <code>uint32</code>
            </td>
            <td></td>
        </tr></table>

### WithErrorSyntax_ResponseAsStruct_Result {#WithErrorSyntax_ResponseAsStruct_Result}
*Defined in [fidl.test.protocols/protocols.test.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/master:tools/fidl/fidlc/testdata/protocols.test.fidl;l=34)*


<table>
    <tr><th>Name</th><th>Type</th><th>Description</th></tr><tr id="WithErrorSyntax_ResponseAsStruct_Result.response">
            <td><code>response</code></td>
            <td>
                <code><a class='link' href='#WithErrorSyntax_ResponseAsStruct_Response'>WithErrorSyntax_ResponseAsStruct_Response</a></code>
            </td>
            <td></td>
        </tr><tr id="WithErrorSyntax_ResponseAsStruct_Result.err">
            <td><code>err</code></td>
            <td>
                <code>uint32</code>
            </td>
            <td></td>
        </tr></table>







