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

protocol NameCollision {};

type UnionCollision = strict union {
    1: foo uint32;
};

type NullableUnionCollision = strict union {
    1: foo uint32;
};

protocol ReturnsCollision {
    NameCollision() -> (resource struct {
        collision client_end:NameCollision;
    });
    UnionCollision(struct {
        collision UnionCollision;
    }) -> ();
    NullableUnionCollision(struct {
        collision NullableUnionCollision:optional;
    }) -> ();
};
