#ifndef CHROMEOS_ASH_SERVICES_IME_DECODER_DECODER_ENGINE_H_
#define CHROMEOS_ASH_SERVICES_IME_DECODER_DECODER_ENGINE_H_
#include <optional>
#include "base/scoped_native_library.h"
#include "chromeos/ash/services/ime/ime_shared_library_wrapper.h"
#include "chromeos/ash/services/ime/public/cpp/shared_lib/interfaces.h"
#include "chromeos/ash/services/ime/public/mojom/input_engine.mojom.h"
#include "chromeos/ash/services/ime/public/mojom/input_method.mojom.h"
#include "chromeos/ash/services/ime/public/mojom/input_method_host.mojom.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver_set.h"
namespace ash {
namespace ime {
class DecoderEngine : public mojom::InputChannel {
public:
explicit DecoderEngine(
ImeCrosPlatform* platform,
std::optional<ImeSharedLibraryWrapper::EntryPoints> entry_points);
DecoderEngine(const DecoderEngine&) = delete;
DecoderEngine& operator=(const DecoderEngine&) = delete;
~DecoderEngine() override;
bool BindRequest(const std::string& ime_spec,
mojo::PendingReceiver<mojom::InputChannel> receiver,
mojo::PendingRemote<mojom::InputChannel> remote,
const std::vector<uint8_t>& extra);
void ProcessMessage(const std::vector<uint8_t>& message,
ProcessMessageCallback callback) override;
private:
std::optional<ImeSharedLibraryWrapper::EntryPoints> decoder_entry_points_;
mojo::ReceiverSet<mojom::InputChannel> decoder_channel_receivers_;
};
}
}
#endif