// Copyright 2018 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.frobinator;

using zx;

protocol EmptyProtocol {};

type BasicUnion = union {
    1: v uint32;
};

protocol Frobinator {
    Frob(struct {
        value string;
    });
    Grob(struct {
        value string;
    }) -> (struct {
        value string;
    });
    -> Hrob(struct {
        value string;
    });
    Fail(struct {
        fail bool;
    }) -> (struct {}) error uint32;
    FailHard(struct {
        fail bool;
    }) -> (struct {
        froyo string;
    }) error uint32;
    FailHardest(struct {
        fail bool;
    }) -> (struct {
        fro string;
        yo string;
    }) error uint32;
    SendEventHandle(resource struct {
        event zx.handle:<EVENT, zx.DEFAULT_EVENT_RIGHTS>;
    });
    SendProtocol(resource struct {
        ep client_end:EmptyProtocol;
    });
    SendBasicUnion(struct {
        union BasicUnion;
    });
};
