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

struct Point {
    uint64 x;
};
union NotAPoint {
    uint64 x;
    uint32 y;
    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]
interface Thing {
    1: one_function(string s, bool b) -> ();
    0x2: two_function(string s, bool b);
    3: three_function(string s, request<Thing> r);
    4: four_function(string s, request<Thing> r) -> (handle<channel> r);
};
