// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fidl.test.coding.fuchsia;

using zx;

enum TestEnum : uint32 {
    ONE = 1;
};

protocol Llcpp {
    Action() -> (int32 v);
    EnumAction() -> (TestEnum v);
};

protocol Example {
    TwoWay(string in) -> (string out);
    OneWay(string in);
    -> OnEvent(string out);
};

protocol Simple {
    /// Replies with the value requested.
    Echo(int32 request) -> (int32 reply);

    /// Never actually replies.  Just closes instead.
    Close() -> (int32 v);
};

protocol TypesTest {
    NonNullableChannel(zx.handle:CHANNEL channel);
    RequestOf512Bytes(array<byte>:496 value);
    RequestOf513Bytes(array<byte>:497 value);
};
