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

#ifndef MEDIA_MOJO_INTERFACES_TRAITS_TEST_SERVICE_MOJOM_FORWARD_H_
#define MEDIA_MOJO_INTERFACES_TRAITS_TEST_SERVICE_MOJOM_FORWARD_H_





#include "mojo/public/cpp/bindings/associated_interface_ptr.h"
#include "mojo/public/cpp/bindings/associated_interface_ptr_info.h"
#include "mojo/public/cpp/bindings/associated_interface_request.h"
#include "mojo/public/cpp/bindings/interface_ptr.h"
#include "mojo/public/cpp/bindings/interface_request.h"
#include "mojo/public/cpp/bindings/lib/control_message_handler.h"
#include "mojo/public/cpp/bindings/pending_associated_receiver.h"
#include "mojo/public/cpp/bindings/pending_associated_remote.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/raw_ptr_impl_ref_traits.h"
#include "mojo/public/cpp/bindings/thread_safe_interface_ptr.h"



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


namespace media {
namespace mojom {
class TraitsTestService;

// @generated_from: media.mojom.TraitsTestService
using TraitsTestServicePtr = mojo::InterfacePtr<TraitsTestService>;
using TraitsTestServicePtrInfo = mojo::InterfacePtrInfo<TraitsTestService>;
using ThreadSafeTraitsTestServicePtr =
    mojo::ThreadSafeInterfacePtr<TraitsTestService>;

// @generated_from: media.mojom.TraitsTestService
using TraitsTestServiceRequest = mojo::InterfaceRequest<TraitsTestService>;

// @generated_from: media.mojom.TraitsTestService
using TraitsTestServiceAssociatedPtr =
    mojo::AssociatedInterfacePtr<TraitsTestService>;
using ThreadSafeTraitsTestServiceAssociatedPtr =
    mojo::ThreadSafeAssociatedInterfacePtr<TraitsTestService>;
using TraitsTestServiceAssociatedPtrInfo =
    mojo::AssociatedInterfacePtrInfo<TraitsTestService>;

// @generated_from: media.mojom.TraitsTestService
using TraitsTestServiceAssociatedRequest =
    mojo::AssociatedInterfaceRequest<TraitsTestService>;




}  // namespace mojom
}  // namespace media

#endif  // MEDIA_MOJO_INTERFACES_TRAITS_TEST_SERVICE_MOJOM_FORWARD_H_
/* Metadata comment
eyJtZXRhIjogW3siZW5kIjogMTI2NCwgImJlZ2luIjogMTI0NCwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1lZGlhLm1vam9tLlRyYWl0c1Rlc3RTZXJ2aWNlIn19
LCB7ImVuZCI6IDE1OTgsICJiZWdpbiI6IDE1ODEsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5l
cmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNo
cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9t
IiwgInNpZ25hdHVyZSI6ICJtZWRpYS5tb2pvbS5UcmFpdHNUZXN0U2VydmljZSJ9fV0sICJ0eXBl
IjogImt5dGhlMCJ9
*/