// 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 SERVICES_SHAPE_DETECTION_PUBLIC_MOJOM_BARCODEDETECTION_MOJOM_FORWARD_H_
#define SERVICES_SHAPE_DETECTION_PUBLIC_MOJOM_BARCODEDETECTION_MOJOM_FORWARD_H_

#include <stdint.h>

#include "mojo/public/cpp/bindings/struct_ptr.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"


#include "mojo/public/cpp/bindings/lib/native_enum_serialization.h"
#include "mojo/public/cpp/bindings/lib/native_struct_serialization.h"

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


namespace shape_detection {
namespace mojom {
class BarcodeDetectionResultDataView;


enum class BarcodeFormat : int32_t;
class BarcodeDetectionResult;
using BarcodeDetectionResultPtr = mojo::StructPtr<BarcodeDetectionResult>;

class BarcodeDetection;

// @generated_from: shape_detection.mojom.BarcodeDetection
using BarcodeDetectionPtr = mojo::InterfacePtr<BarcodeDetection>;
using BarcodeDetectionPtrInfo = mojo::InterfacePtrInfo<BarcodeDetection>;
using ThreadSafeBarcodeDetectionPtr =
    mojo::ThreadSafeInterfacePtr<BarcodeDetection>;

// @generated_from: shape_detection.mojom.BarcodeDetection
using BarcodeDetectionRequest = mojo::InterfaceRequest<BarcodeDetection>;

// @generated_from: shape_detection.mojom.BarcodeDetection
using BarcodeDetectionAssociatedPtr =
    mojo::AssociatedInterfacePtr<BarcodeDetection>;
using ThreadSafeBarcodeDetectionAssociatedPtr =
    mojo::ThreadSafeAssociatedInterfacePtr<BarcodeDetection>;
using BarcodeDetectionAssociatedPtrInfo =
    mojo::AssociatedInterfacePtrInfo<BarcodeDetection>;

// @generated_from: shape_detection.mojom.BarcodeDetection
using BarcodeDetectionAssociatedRequest =
    mojo::AssociatedInterfaceRequest<BarcodeDetection>;




}  // namespace mojom
}  // namespace shape_detection

#endif  // SERVICES_SHAPE_DETECTION_PUBLIC_MOJOM_BARCODEDETECTION_MOJOM_FORWARD_H_
/* Metadata comment
eyJtZXRhIjogW3siZW5kIjogMTY5NCwgImJlZ2luIjogMTY3NSwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogInNoYXBlX2RldGVjdGlvbi5tb2pvbS5CYXJjb2RlRGV0
ZWN0aW9uIn19LCB7ImVuZCI6IDIwMzAsICJiZWdpbiI6IDIwMTQsICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdl
IjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJzaGFwZV9kZXRlY3Rpb24ubW9qb20uQmFyY29kZURl
dGVjdGlvbiJ9fV0sICJ0eXBlIjogImt5dGhlMCJ9
*/