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

protocol Protocol {};

type StructOfEndpoints = resource struct {
    client_end client_end:Protocol;
    optional_client_end client_end:<Protocol, optional>;
    server_end server_end:Protocol;
    optional_server_end server_end:<Protocol, optional>;
};

type TableOfEndpoints = resource struct {
    t @generated_name("TableOfEndpointsTable") resource table {
        1: client_end client_end:Protocol;
        2: server_end server_end:Protocol;
    };
};

type UnionOfEndpoints = resource struct {
    u @generated_name("UnionOfEndpointsUnion") resource union {
        1: client_end client_end:Protocol;
        2: server_end server_end:Protocol;
    };
};
