// 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.examples.example5;

using zx;

struct Point {
    uint64 x;
};

union NotAPoint {
    1: uint64 x;
    2: uint32 y;
    3: uint16 z;
};

enum Enum {
    x = 23;
};

enum Enum2 : uint64 {
    enum_0 = 0;
    enum_1 = 23;
};

enum Enum23 : int32 {
    enum_3 = 0;
    enum_4 = -23;
};

[Discoverable]
protocol Thing {
    one_function(string s, bool b) -> ();
    two_function(string s, bool b);
    three_function(string s, request<Thing> r);
    four_function(string s, request<Thing> r) -> (zx.handle:CHANNEL r);
};
