blob: 0256b660a2178354f29bc0e5a3c5775943b1d3a3 [file] [log] [blame]
#include "libcxx_aconfigd.hpp"
#include <stdexcept>
#include "com_android_aconfig_new_storage.h"
#include "include/aconfigd.h"
#include "lib.rs.h"
#include "rust/cxx.h"
namespace aconfigdwrapper {
class CppAconfigd::impl {
friend CppAconfigd;
public:
impl(const std::string& root_dir, const std::string& storage_records)
: m_aconfigd(std::make_unique<android::aconfigd::Aconfigd>(
root_dir, storage_records))
{}
private:
std::unique_ptr<android::aconfigd::Aconfigd> m_aconfigd;
};
CppAconfigd::CppAconfigd(const std::string& str1, const std::string& str2)
: impl(new class CppAconfigd::impl(str1, str2)) {}
CppVoidResult CppAconfigd::initialize_platform_storage() const {
auto init_result = impl->m_aconfigd->InitializePlatformStorage();
CppVoidResult result;
if (!init_result.ok()) {
result.error_message = init_result.error().message();
result.status = CppResultStatus::Err;
} else {
result.status = CppResultStatus::Ok;
}
return result;
}
CppVoidResult CppAconfigd::initialize_mainline_storage() const {
auto init_result = impl->m_aconfigd->InitializeMainlineStorage();
CppVoidResult result;
if (!init_result.ok()) {
result.error_message = init_result.error().message();
result.status = CppResultStatus::Err;
} else {
result.status = CppResultStatus::Ok;
}
return result;
}
CppVoidResult CppAconfigd::initialize_in_memory_storage_records() const {
auto init_result = impl->m_aconfigd->InitializeInMemoryStorageRecords();
CppVoidResult result;
if (!init_result.ok()) {
result.error_message = init_result.error().message();
result.status = CppResultStatus::Err;
} else {
result.status = CppResultStatus::Ok;
}
return result;
}
CppStringResult CppAconfigd::handle_socket_request(
const std::string& messages_string) const {
auto request_messages = android::aconfigd::StorageRequestMessages{};
request_messages.ParseFromString(messages_string);
auto return_messages = android::aconfigd::StorageReturnMessages();
for (auto& request : request_messages.msgs()) {
auto* return_msg = return_messages.add_msgs();
auto result = impl->m_aconfigd->HandleSocketRequest(request, *return_msg);
if (!result.ok()) {
CppStringResult cpp_result;
cpp_result.status = CppResultStatus::Err;
cpp_result.error_message = result.error().message();
return cpp_result;
}
}
auto content = std::string();
return_messages.SerializeToString(&content);
CppStringResult result;
result.data = std::make_unique<std::string>(content);
result.status = CppResultStatus::Ok;
return result;
}
std::unique_ptr<CppAconfigd> new_cpp_aconfigd(const std::string& str1,
const std::string& str2) {
return std::make_unique<CppAconfigd>(str1, str2);
}
} // namespace aconfigdwrapper