// 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.
// We want a test that loads the protocol below before the protocol that is
// composed into it, and another that loads it after the protocol that is
// composed into it, to make sure that both have the same behavior.  The only way
// to control the order of protocol loading in fidl_codec is to control the order of
// library loading.  This protocol, therefore, needs to be a separate library.

library test.fidlcodec.composedinto;

using test.fidlcodec.examples;

// For testing what happens when fidl_codec encounters a composed method.
closed protocol ComposedParamProtocol {
    compose test.fidlcodec.examples.ParamProtocol;
};
