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

using example;

/// The server will be implemented manually to test receiving xunions as unions
/// in both clients and servers.
protocol ReceiveXunionsForUnions {
    // This event contains a union. However, it will be a xunion on the wire.
    -> UnionEvent(example.Sandwich4 sandwich);

    // This request contains a union. However, it will be a xunion on the wire.
    SendUnion(example.Sandwich4 sandwich) -> (bool success);

    // This response contains a union. However, it will be a xunion on the wire.
    ReceiveUnion() -> (example.Sandwich4 sandwich);
};

/// Tests handling differing argument offsets caused by size differences between
/// unions to xunions.
protocol MultiArgReceiveXunions {
    TwoUnion() -> (example.Sandwich4 one, example.Sandwich4 two);
};
