// 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 fidl.rust.test.compilation.compose;

using fidl.rust.test.compilation;

protocol TestComposeInterface {
    compose fidl.rust.test.compilation.TestInterface;

    TestNewMethod(struct {
        test_x_union fidl.rust.test.compilation.TestXUnion;
    }) -> (struct {
        test_x_union fidl.rust.test.compilation.TestXUnion;
    });
};

/// Same type name as the one we have a dep on.
type Result = struct {
    ensure_that_type_named_result_compiles string;
};
