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

closed protocol NameCollision {};

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

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

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