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

type VectorWithLimit = struct {
    v vector<uint8>:2;
};

type VectorWrapper = struct {
    v vector<uint8>;
};

type OptionalVectorWrapper = struct {
    v vector<uint8>:optional;
};

type VectorOfByteVector = struct {
    v vector<vector<uint8>>;
};

type VectorOfStrings = struct {
    v vector<string>;
};

type LotsOfVectors = struct {
    v1 vector<uint16>;
    v2 vector<uint32>;
    v3 vector<uint64>;
    v4 vector<string>;
    v5 vector<int8>;
    v6 vector<int16>;
    v7 vector<int32>;
    v8 vector<int64>;
    v9 vector<bool>;
};
