blob: ec024344b22d90e7c8dfc85a213ec5c89d18788a [file]
// Autogenerated from Pigeon (v29.0.1), do not edit directly.
// See also: https://pub.dev/packages/pigeon
#undef _HAS_EXCEPTIONS
#include "messages.g.h"
#include <flutter/basic_message_channel.h>
#include <flutter/binary_messenger.h>
#include <flutter/encodable_value.h>
#include <flutter/standard_message_codec.h>
#include <cmath>
#include <limits>
#include <map>
#include <optional>
#include <sstream>
#include <string>
namespace {{projectName}} {
using ::flutter::BasicMessageChannel;
using ::flutter::CustomEncodableValue;
using ::flutter::EncodableList;
using ::flutter::EncodableMap;
using ::flutter::EncodableValue;
FlutterError CreateConnectionError(const std::string channel_name) {
return FlutterError(
"channel-error",
"Unable to establish connection on channel: '" + channel_name + "'.",
EncodableValue(""));
}
namespace {
template<typename T>
bool PigeonInternalDeepEquals(const T& a, const T& b);
bool PigeonInternalDeepEquals(const double& a, const double& b);
template<typename T>
bool PigeonInternalDeepEquals(const std::vector<T>& a, const std::vector<T>& b);
template<typename K, typename V>
bool PigeonInternalDeepEquals(const std::map<K, V>& a, const std::map<K, V>& b);
template<typename T>
bool PigeonInternalDeepEquals(const std::optional<T>& a, const std::optional<T>& b);
template<typename T>
bool PigeonInternalDeepEquals(const std::unique_ptr<T>& a, const std::unique_ptr<T>& b);
bool PigeonInternalDeepEquals(const ::flutter::EncodableValue& a, const ::flutter::EncodableValue& b);
template<typename T>
bool PigeonInternalDeepEquals(const T& a, const T& b) {
return a == b;
}
template<typename T>
bool PigeonInternalDeepEquals(const std::vector<T>& a, const std::vector<T>& b) {
if (a.size() != b.size()) {
return false;
}
for (size_t i = 0; i < a.size(); ++i) {
if (!PigeonInternalDeepEquals(a[i], b[i])) {
return false;
}
}
return true;
}
template <typename K, typename V>
bool PigeonInternalDeepEquals(const std::map<K, V>& a, const std::map<K, V>& b) {
if (a.size() != b.size()) {
return false;
}
for (const auto& kv : a) {
bool found = false;
for (const auto& b_kv : b) {
if (PigeonInternalDeepEquals(kv.first, b_kv.first)) {
if (PigeonInternalDeepEquals(kv.second, b_kv.second)) {
found = true;
break;
} else {
return false;
}
}
}
if (!found) {
return false;
}
}
return true;
}
bool PigeonInternalDeepEquals(const double& a, const double& b) {
// Normalize -0.0 to 0.0 and handle NaN equality.
return (a == b) || (std::isnan(a) && std::isnan(b));
}
template<typename T>
bool PigeonInternalDeepEquals(const std::optional<T>& a, const std::optional<T>& b) {
if (!a && !b) {
return true;
}
if (!a || !b) {
return false;
}
return PigeonInternalDeepEquals(*a, *b);
}
template<typename T>
bool PigeonInternalDeepEquals(const std::unique_ptr<T>& a, const std::unique_ptr<T>& b) {
if (a.get() == b.get()) {
return true;
}
if (!a || !b) {
return false;
}
return PigeonInternalDeepEquals(*a, *b);
}
bool PigeonInternalDeepEquals(const ::flutter::EncodableValue& a, const ::flutter::EncodableValue& b) {
if (a.index() != b.index()) {
return false;
}
if (const double* da = std::get_if<double>(&a)) {
return PigeonInternalDeepEquals(*da, std::get<double>(b));
} else if (const ::flutter::EncodableList* la = std::get_if<::flutter::EncodableList>(&a)) {
return PigeonInternalDeepEquals(*la, std::get<::flutter::EncodableList>(b));
} else if (const ::flutter::EncodableMap* ma = std::get_if<::flutter::EncodableMap>(&a)) {
return PigeonInternalDeepEquals(*ma, std::get<::flutter::EncodableMap>(b));
}
return a == b;
}
template <typename T>
size_t PigeonInternalDeepHash(const T& v);
size_t PigeonInternalDeepHash(const double& v);
template <typename T>
size_t PigeonInternalDeepHash(const std::vector<T>& v);
template <typename K, typename V>
size_t PigeonInternalDeepHash(const std::map<K, V>& v);
template <typename T>
size_t PigeonInternalDeepHash(const std::optional<T>& v);
template <typename T>
size_t PigeonInternalDeepHash(const std::unique_ptr<T>& v);
size_t PigeonInternalDeepHash(const ::flutter::EncodableValue& v);
template <typename T>
size_t PigeonInternalDeepHash(const T& v) {
return std::hash<T>()(v);
}
template <typename T>
size_t PigeonInternalDeepHash(const std::vector<T>& v) {
size_t result = 1;
for (const auto& item : v) {
result = result * 31 + PigeonInternalDeepHash(item);
}
return result;
}
template <typename K, typename V>
size_t PigeonInternalDeepHash(const std::map<K, V>& v) {
size_t result = 0;
for (const auto& kv : v) {
result += ((PigeonInternalDeepHash(kv.first) * 31) ^ PigeonInternalDeepHash(kv.second));
}
return result;
}
size_t PigeonInternalDeepHash(const double& v) {
if (std::isnan(v)) {
// Normalize NaN to a consistent hash.
return std::hash<double>()(std::numeric_limits<double>::quiet_NaN());
}
if (v == 0.0) {
// Normalize -0.0 to 0.0 so they have the same hash code.
return std::hash<double>()(0.0);
}
return std::hash<double>()(v);
}
template <typename T>
size_t PigeonInternalDeepHash(const std::optional<T>& v) {
return v ? PigeonInternalDeepHash(*v) : 0;
}
template <typename T>
size_t PigeonInternalDeepHash(const std::unique_ptr<T>& v) {
return v ? PigeonInternalDeepHash(*v) : 0;
}
size_t PigeonInternalDeepHash(const ::flutter::EncodableValue& v) {
size_t result = v.index();
if (const double* dv = std::get_if<double>(&v)) {
result = result * 31 + PigeonInternalDeepHash(*dv);
} else if (const ::flutter::EncodableList* lv =
std::get_if<::flutter::EncodableList>(&v)) {
result = result * 31 + PigeonInternalDeepHash(*lv);
} else if (const ::flutter::EncodableMap* mv =
std::get_if<::flutter::EncodableMap>(&v)) {
result = result * 31 + PigeonInternalDeepHash(*mv);
} else {
std::visit(
[&result](const auto& val) {
using T = std::decay_t<decltype(val)>;
if constexpr (!std::is_same_v<T, double> &&
!std::is_same_v<T, ::flutter::EncodableList> &&
!std::is_same_v<T, ::flutter::EncodableMap> &&
!std::is_same_v<T, std::monostate> &&
!std::is_same_v<T, ::flutter::CustomEncodableValue>) {
result = result * 31 + PigeonInternalDeepHash(val);
}
},
v);
}
return result;
}
template <typename T>
std::string PigeonInternalToString(const T& v);
std::string PigeonInternalToString(const bool& v);
template <typename T>
std::string PigeonInternalToString(const std::vector<T>& v);
template <typename K, typename V>
std::string PigeonInternalToString(const std::map<K, V>& v);
template <typename T>
std::string PigeonInternalToString(const std::optional<T>& v);
template <typename T>
std::string PigeonInternalToString(const std::unique_ptr<T>& v);
std::string PigeonInternalToString(const ::flutter::EncodableValue& v);
template <typename T>
std::string PigeonInternalToString(const T& v) {
std::stringstream ss;
if constexpr (std::is_enum_v<T>) {
ss << static_cast<int>(v);
} else {
ss << v;
}
return ss.str();
}
std::string PigeonInternalToString(const bool& v) {
return v ? "true" : "false";
}
template <typename T>
std::string PigeonInternalToString(const std::vector<T>& v) {
std::stringstream ss;
ss << "[";
for (size_t i = 0; i < v.size(); ++i) {
if (i > 0) {
ss << ", ";
}
ss << PigeonInternalToString(v[i]);
}
ss << "]";
return ss.str();
}
template <typename K, typename V>
std::string PigeonInternalToString(const std::map<K, V>& v) {
std::stringstream ss;
ss << "{";
bool first = true;
for (const auto& kv : v) {
if (!first) {
ss << ", ";
}
first = false;
ss << PigeonInternalToString(kv.first) << ": " << PigeonInternalToString(kv.second);
}
ss << "}";
return ss.str();
}
template <typename T>
std::string PigeonInternalToString(const std::optional<T>& v) {
return v ? PigeonInternalToString(*v) : "null";
}
template <typename T>
std::string PigeonInternalToString(const std::unique_ptr<T>& v) {
return v ? PigeonInternalToString(*v) : "null";
}
std::string PigeonInternalToString(const ::flutter::EncodableValue& v) {
return std::visit(
[](const auto& val) {
using T = std::decay_t<decltype(val)>;
if constexpr (std::is_same_v<T, std::monostate>) {
return std::string("null");
} else if constexpr (std::is_same_v<T, bool>) {
return val ? std::string("true") : std::string("false");
} else if constexpr (std::is_same_v<T, std::string>) {
return "\"" + val + "\"";
} else if constexpr (std::is_same_v<T, ::flutter::CustomEncodableValue>) {
return std::string("[custom]");
} else {
return PigeonInternalToString(val);
}
},
v);
}
} // namespace
PigeonInternalCodecSerializer::PigeonInternalCodecSerializer() {}
EncodableValue PigeonInternalCodecSerializer::ReadValueOfType(
uint8_t type,
::flutter::ByteStreamReader* stream) const {
return ::flutter::StandardCodecSerializer::ReadValueOfType(type, stream);
}
void PigeonInternalCodecSerializer::WriteValue(
const EncodableValue& value,
::flutter::ByteStreamWriter* stream) const {
::flutter::StandardCodecSerializer::WriteValue(value, stream);
}
/// The codec used by {{pluginClass}}Api.
const ::flutter::StandardMessageCodec& {{pluginClass}}Api::GetCodec() {
return ::flutter::StandardMessageCodec::GetInstance(&PigeonInternalCodecSerializer::GetInstance());
}
// Sets up an instance of `{{pluginClass}}Api` to handle messages through the `binary_messenger`.
void {{pluginClass}}Api::SetUp(
::flutter::BinaryMessenger* binary_messenger,
{{pluginClass}}Api* api) {
{{pluginClass}}Api::SetUp(binary_messenger, api, "");
}
void {{pluginClass}}Api::SetUp(
::flutter::BinaryMessenger* binary_messenger,
{{pluginClass}}Api* api,
const std::string& message_channel_suffix) {
const std::string prepended_suffix = message_channel_suffix.length() > 0 ? std::string(".") + message_channel_suffix : "";
{
BasicMessageChannel<> channel(binary_messenger, "dev.flutter.pigeon.{{projectName}}.{{pluginClass}}Api.getPlatformVersion" + prepended_suffix, &GetCodec());
if (api != nullptr) {
channel.SetMessageHandler([api](const EncodableValue& message, const ::flutter::MessageReply<EncodableValue>& reply) {
try {
ErrorOr<std::string> output = api->GetPlatformVersion();
if (output.has_error()) {
reply(WrapError(output.error()));
return;
}
EncodableList wrapped;
wrapped.push_back(EncodableValue(std::move(output).TakeValue()));
reply(EncodableValue(std::move(wrapped)));
} catch (const std::exception& exception) {
reply(WrapError(exception.what()));
}
});
} else {
channel.SetMessageHandler(nullptr);
}
}
}
EncodableValue {{pluginClass}}Api::WrapError(std::string_view error_message) {
return EncodableValue(EncodableList{
EncodableValue(std::string(error_message)),
EncodableValue("Error"),
EncodableValue()
});
}
EncodableValue {{pluginClass}}Api::WrapError(const FlutterError& error) {
return EncodableValue(EncodableList{
EncodableValue(error.code()),
EncodableValue(error.message()),
error.details()
});
}
} // namespace {{projectName}}