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

struct Point {
    int32 x;
    int32 y;
};

enum Direction : uint32 {
    Up = 0;
    Down = 1;
    Left = 2;
    Right = 3;
};

struct ArraysOfPoints {
    array<Point>:4 p;
    ArraysOfPoints? more_points;
};

struct VectorOfPoints {
    vector<Point>:4 p;
};

struct VectorOfDirections {
    vector<Direction>:4 d;
};

union Points {
    Point one_point;
    ArraysOfPoints many_points;
};

const uint32 NumberOfDirections = 4;

protocol Drawing {
    Draw(Point p, Direction d);
    DrawLots(Points ps);
    -> DrawSucceeded(uint32 draws);
};
