// 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;

type TestEnum = strict enum : uint32 {
    ONE = 1;
};

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

protocol Example {
    TwoWay(struct {
        in string;
    }) -> (struct {
        out string;
    });
    OneWay(struct {
        in string;
    });
    -> OnEvent(struct {
        out string;
    });
    -> OnResourceEvent(resource struct {
        h zx.handle;
    });
};

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

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