blob: a60fd92a974c99d30a8066b7235172692a1d4ca5 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Autogenerated from Pigeon (v10.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 <map>
#include <optional>
#include <string>
namespace file_selector_windows {
using flutter::BasicMessageChannel;
using flutter::CustomEncodableValue;
using flutter::EncodableList;
using flutter::EncodableMap;
using flutter::EncodableValue;
// TypeGroup
TypeGroup::TypeGroup(const std::string& label, const EncodableList& extensions)
: label_(label), extensions_(extensions) {}
const std::string& TypeGroup::label() const { return label_; }
void TypeGroup::set_label(std::string_view value_arg) { label_ = value_arg; }
const EncodableList& TypeGroup::extensions() const { return extensions_; }
void TypeGroup::set_extensions(const EncodableList& value_arg) {
extensions_ = value_arg;
}
EncodableList TypeGroup::ToEncodableList() const {
EncodableList list;
list.reserve(2);
list.push_back(EncodableValue(label_));
list.push_back(EncodableValue(extensions_));
return list;
}
TypeGroup TypeGroup::FromEncodableList(const EncodableList& list) {
TypeGroup decoded(std::get<std::string>(list[0]),
std::get<EncodableList>(list[1]));
return decoded;
}
// SelectionOptions
SelectionOptions::SelectionOptions(bool allow_multiple, bool select_folders,
const EncodableList& allowed_types)
: allow_multiple_(allow_multiple),
select_folders_(select_folders),
allowed_types_(allowed_types) {}
bool SelectionOptions::allow_multiple() const { return allow_multiple_; }
void SelectionOptions::set_allow_multiple(bool value_arg) {
allow_multiple_ = value_arg;
}
bool SelectionOptions::select_folders() const { return select_folders_; }
void SelectionOptions::set_select_folders(bool value_arg) {
select_folders_ = value_arg;
}
const EncodableList& SelectionOptions::allowed_types() const {
return allowed_types_;
}
void SelectionOptions::set_allowed_types(const EncodableList& value_arg) {
allowed_types_ = value_arg;
}
EncodableList SelectionOptions::ToEncodableList() const {
EncodableList list;
list.reserve(3);
list.push_back(EncodableValue(allow_multiple_));
list.push_back(EncodableValue(select_folders_));
list.push_back(EncodableValue(allowed_types_));
return list;
}
SelectionOptions SelectionOptions::FromEncodableList(
const EncodableList& list) {
SelectionOptions decoded(std::get<bool>(list[0]), std::get<bool>(list[1]),
std::get<EncodableList>(list[2]));
return decoded;
}
// FileDialogResult
FileDialogResult::FileDialogResult(const EncodableList& paths)
: paths_(paths) {}
FileDialogResult::FileDialogResult(const EncodableList& paths,
const int64_t* type_group_index)
: paths_(paths),
type_group_index_(type_group_index
? std::optional<int64_t>(*type_group_index)
: std::nullopt) {}
const EncodableList& FileDialogResult::paths() const { return paths_; }
void FileDialogResult::set_paths(const EncodableList& value_arg) {
paths_ = value_arg;
}
const int64_t* FileDialogResult::type_group_index() const {
return type_group_index_ ? &(*type_group_index_) : nullptr;
}
void FileDialogResult::set_type_group_index(const int64_t* value_arg) {
type_group_index_ =
value_arg ? std::optional<int64_t>(*value_arg) : std::nullopt;
}
void FileDialogResult::set_type_group_index(int64_t value_arg) {
type_group_index_ = value_arg;
}
EncodableList FileDialogResult::ToEncodableList() const {
EncodableList list;
list.reserve(2);
list.push_back(EncodableValue(paths_));
list.push_back(type_group_index_ ? EncodableValue(*type_group_index_)
: EncodableValue());
return list;
}
FileDialogResult FileDialogResult::FromEncodableList(
const EncodableList& list) {
FileDialogResult decoded(std::get<EncodableList>(list[0]));
auto& encodable_type_group_index = list[1];
if (!encodable_type_group_index.IsNull()) {
decoded.set_type_group_index(encodable_type_group_index.LongValue());
}
return decoded;
}
FileSelectorApiCodecSerializer::FileSelectorApiCodecSerializer() {}
EncodableValue FileSelectorApiCodecSerializer::ReadValueOfType(
uint8_t type, flutter::ByteStreamReader* stream) const {
switch (type) {
case 128:
return CustomEncodableValue(FileDialogResult::FromEncodableList(
std::get<EncodableList>(ReadValue(stream))));
case 129:
return CustomEncodableValue(SelectionOptions::FromEncodableList(
std::get<EncodableList>(ReadValue(stream))));
case 130:
return CustomEncodableValue(TypeGroup::FromEncodableList(
std::get<EncodableList>(ReadValue(stream))));
default:
return flutter::StandardCodecSerializer::ReadValueOfType(type, stream);
}
}
void FileSelectorApiCodecSerializer::WriteValue(
const EncodableValue& value, flutter::ByteStreamWriter* stream) const {
if (const CustomEncodableValue* custom_value =
std::get_if<CustomEncodableValue>(&value)) {
if (custom_value->type() == typeid(FileDialogResult)) {
stream->WriteByte(128);
WriteValue(
EncodableValue(
std::any_cast<FileDialogResult>(*custom_value).ToEncodableList()),
stream);
return;
}
if (custom_value->type() == typeid(SelectionOptions)) {
stream->WriteByte(129);
WriteValue(
EncodableValue(
std::any_cast<SelectionOptions>(*custom_value).ToEncodableList()),
stream);
return;
}
if (custom_value->type() == typeid(TypeGroup)) {
stream->WriteByte(130);
WriteValue(EncodableValue(
std::any_cast<TypeGroup>(*custom_value).ToEncodableList()),
stream);
return;
}
}
flutter::StandardCodecSerializer::WriteValue(value, stream);
}
/// The codec used by FileSelectorApi.
const flutter::StandardMessageCodec& FileSelectorApi::GetCodec() {
return flutter::StandardMessageCodec::GetInstance(
&FileSelectorApiCodecSerializer::GetInstance());
}
// Sets up an instance of `FileSelectorApi` to handle messages through the
// `binary_messenger`.
void FileSelectorApi::SetUp(flutter::BinaryMessenger* binary_messenger,
FileSelectorApi* api) {
{
auto channel = std::make_unique<BasicMessageChannel<>>(
binary_messenger, "dev.flutter.pigeon.FileSelectorApi.showOpenDialog",
&GetCodec());
if (api != nullptr) {
channel->SetMessageHandler(
[api](const EncodableValue& message,
const flutter::MessageReply<EncodableValue>& reply) {
try {
const auto& args = std::get<EncodableList>(message);
const auto& encodable_options_arg = args.at(0);
if (encodable_options_arg.IsNull()) {
reply(WrapError("options_arg unexpectedly null."));
return;
}
const auto& options_arg = std::any_cast<const SelectionOptions&>(
std::get<CustomEncodableValue>(encodable_options_arg));
const auto& encodable_initial_directory_arg = args.at(1);
const auto* initial_directory_arg =
std::get_if<std::string>(&encodable_initial_directory_arg);
const auto& encodable_confirm_button_text_arg = args.at(2);
const auto* confirm_button_text_arg =
std::get_if<std::string>(&encodable_confirm_button_text_arg);
ErrorOr<FileDialogResult> output = api->ShowOpenDialog(
options_arg, initial_directory_arg, confirm_button_text_arg);
if (output.has_error()) {
reply(WrapError(output.error()));
return;
}
EncodableList wrapped;
wrapped.push_back(
CustomEncodableValue(std::move(output).TakeValue()));
reply(EncodableValue(std::move(wrapped)));
} catch (const std::exception& exception) {
reply(WrapError(exception.what()));
}
});
} else {
channel->SetMessageHandler(nullptr);
}
}
{
auto channel = std::make_unique<BasicMessageChannel<>>(
binary_messenger, "dev.flutter.pigeon.FileSelectorApi.showSaveDialog",
&GetCodec());
if (api != nullptr) {
channel->SetMessageHandler(
[api](const EncodableValue& message,
const flutter::MessageReply<EncodableValue>& reply) {
try {
const auto& args = std::get<EncodableList>(message);
const auto& encodable_options_arg = args.at(0);
if (encodable_options_arg.IsNull()) {
reply(WrapError("options_arg unexpectedly null."));
return;
}
const auto& options_arg = std::any_cast<const SelectionOptions&>(
std::get<CustomEncodableValue>(encodable_options_arg));
const auto& encodable_initial_directory_arg = args.at(1);
const auto* initial_directory_arg =
std::get_if<std::string>(&encodable_initial_directory_arg);
const auto& encodable_suggested_name_arg = args.at(2);
const auto* suggested_name_arg =
std::get_if<std::string>(&encodable_suggested_name_arg);
const auto& encodable_confirm_button_text_arg = args.at(3);
const auto* confirm_button_text_arg =
std::get_if<std::string>(&encodable_confirm_button_text_arg);
ErrorOr<FileDialogResult> output = api->ShowSaveDialog(
options_arg, initial_directory_arg, suggested_name_arg,
confirm_button_text_arg);
if (output.has_error()) {
reply(WrapError(output.error()));
return;
}
EncodableList wrapped;
wrapped.push_back(
CustomEncodableValue(std::move(output).TakeValue()));
reply(EncodableValue(std::move(wrapped)));
} catch (const std::exception& exception) {
reply(WrapError(exception.what()));
}
});
} else {
channel->SetMessageHandler(nullptr);
}
}
}
EncodableValue FileSelectorApi::WrapError(std::string_view error_message) {
return EncodableValue(
EncodableList{EncodableValue(std::string(error_message)),
EncodableValue("Error"), EncodableValue()});
}
EncodableValue FileSelectorApi::WrapError(const FlutterError& error) {
return EncodableValue(EncodableList{EncodableValue(error.code()),
EncodableValue(error.message()),
error.details()});
}
} // namespace file_selector_windows