#ifndef ui_devtools_protocol_Forward_h
#define ui_devtools_protocol_Forward_h
#include "components/ui_devtools/devtools_export.h"
#include <memory>
#include <vector>
#include "third_party/inspector_protocol/crdtp/error_support.h"
#include "third_party/inspector_protocol/crdtp/dispatch.h"
#include "third_party/inspector_protocol/crdtp/frontend_channel.h"
#include "third_party/inspector_protocol/crdtp/protocol_core.h"
#include "third_party/inspector_protocol/crdtp/chromium/protocol_traits.h"
namespace ui_devtools {
namespace protocol {
using DispatchResponse = crdtp::DispatchResponse;
using ErrorSupport = crdtp::ErrorSupport;
using Serializable = crdtp::Serializable;
using FrontendChannel = crdtp::FrontendChannel;
using DomainDispatcher = crdtp::DomainDispatcher;
using UberDispatcher = crdtp::UberDispatcher;
using Response = DispatchResponse;
using DictionaryValue = crdtp::traits::DictionaryValue;
using Object = crdtp::traits::DictionaryValue;
using ListValue = crdtp::traits::ListValue;
using Value = crdtp::traits::Value;
using String = crdtp::traits::String;
using Binary = crdtp::Binary;
using crdtp::detail::PtrMaybe;
using crdtp::detail::ValueMaybe;
template<typename T>
using Maybe = crdtp::Maybe<T>;
namespace detail {
template <typename T>
struct ArrayTypedef { typedef std::vector<std::unique_ptr<T>> type; };
template <>
struct ArrayTypedef<String> { typedef std::vector<String> type; };
template <>
struct ArrayTypedef<int> { typedef std::vector<int> type; };
template <>
struct ArrayTypedef<double> { typedef std::vector<double> type; };
template <>
struct ArrayTypedef<bool> { typedef std::vector<bool> type; };
template <>
struct ArrayTypedef<Binary> { typedef std::vector<Binary> type; };
}
template <typename T>
using Array = typename detail::ArrayTypedef<T>::type;
}
}
#endif