// mojo/public/cpp/bindings/tests/associated_interface_unittest.test-mojom-shared.h is auto generated by mojom_bindings_generator.py, do not edit

// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef MOJO_PUBLIC_CPP_BINDINGS_TESTS_ASSOCIATED_INTERFACE_UNITTEST_TEST_MOJOM_SHARED_H_
#define MOJO_PUBLIC_CPP_BINDINGS_TESTS_ASSOCIATED_INTERFACE_UNITTEST_TEST_MOJOM_SHARED_H_

#include <stdint.h>

#include <functional>
#include <iosfwd>
#include <type_traits>
#include <utility>
#include "mojo/public/cpp/bindings/array_data_view.h"
#include "mojo/public/cpp/bindings/enum_traits.h"
#include "mojo/public/cpp/bindings/interface_data_view.h"
#include "mojo/public/cpp/bindings/lib/bindings_internal.h"
#include "mojo/public/cpp/bindings/lib/serialization.h"
#include "mojo/public/cpp/bindings/map_data_view.h"
#include "mojo/public/cpp/bindings/string_data_view.h"

#include "third_party/perfetto/include/perfetto/tracing/traced_value_forward.h"

#include "mojo/public/cpp/bindings/tests/associated_interface_unittest.test-mojom-shared-internal.h"
#include "mojo/public/mojom/base/generic_pending_associated_receiver.mojom-shared.h"
#include "mojo/public/cpp/bindings/lib/interface_serialization.h"
#include "mojo/public/cpp/system/data_pipe.h"



#ifdef KYTHE_IS_RUNNING
#pragma kythe_inline_metadata "Metadata comment"
#endif


namespace mojo::test::associated_interface_unittest::mojom {


}  // mojo::test::associated_interface_unittest::mojom

namespace mojo {
namespace internal {

}  // namespace internal
}  // namespace mojo


namespace mojo::test::associated_interface_unittest::mojom {
// Interface base classes. They are used for type safety check.
class ClumsyBinderInterfaceBase {};

using ClumsyBinderPtrDataView =
    mojo::InterfacePtrDataView<ClumsyBinderInterfaceBase>;
using ClumsyBinderRequestDataView =
    mojo::InterfaceRequestDataView<ClumsyBinderInterfaceBase>;
using ClumsyBinderAssociatedPtrInfoDataView =
    mojo::AssociatedInterfacePtrInfoDataView<ClumsyBinderInterfaceBase>;
using ClumsyBinderAssociatedRequestDataView =
    mojo::AssociatedInterfaceRequestDataView<ClumsyBinderInterfaceBase>;
class AssociatedBinderInterfaceBase {};

using AssociatedBinderPtrDataView =
    mojo::InterfacePtrDataView<AssociatedBinderInterfaceBase>;
using AssociatedBinderRequestDataView =
    mojo::InterfaceRequestDataView<AssociatedBinderInterfaceBase>;
using AssociatedBinderAssociatedPtrInfoDataView =
    mojo::AssociatedInterfacePtrInfoDataView<AssociatedBinderInterfaceBase>;
using AssociatedBinderAssociatedRequestDataView =
    mojo::AssociatedInterfaceRequestDataView<AssociatedBinderInterfaceBase>;


}  // mojo::test::associated_interface_unittest::mojom

namespace std {

}  // namespace std

namespace mojo {

}  // namespace mojo


namespace mojo::test::associated_interface_unittest::mojom {


}  // mojo::test::associated_interface_unittest::mojom

// Declare TraceFormatTraits for enums, which should be defined in ::perfetto
// namespace.

#endif  // MOJO_PUBLIC_CPP_BINDINGS_TESTS_ASSOCIATED_INTERFACE_UNITTEST_TEST_MOJOM_SHARED_H_
/* Metadata comment
eyJ0eXBlIjogImt5dGhlMCIsICJtZXRhIjogW119
*/