1 #include "libcxx_aconfigd.hpp"
2
3 #include <stdexcept>
4
5 #include "com_android_aconfig_new_storage.h"
6 #include "include/aconfigd.h"
7 #include "lib.rs.h"
8 #include "rust/cxx.h"
9
10 namespace aconfigdwrapper {
11
12 class CppAconfigd::impl {
13 friend CppAconfigd;
14
15 public:
impl(const std::string & root_dir,const std::string & storage_records)16 impl(const std::string& root_dir, const std::string& storage_records)
17 : m_aconfigd(std::make_unique<android::aconfigd::Aconfigd>(
18 root_dir, storage_records))
19
20 {}
21
22 private:
23 std::unique_ptr<android::aconfigd::Aconfigd> m_aconfigd;
24 };
25
CppAconfigd(const std::string & str1,const std::string & str2)26 CppAconfigd::CppAconfigd(const std::string& str1, const std::string& str2)
27 : impl(new class CppAconfigd::impl(str1, str2)) {}
28
initialize_platform_storage() const29 CppVoidResult CppAconfigd::initialize_platform_storage() const {
30 auto init_result = impl->m_aconfigd->InitializePlatformStorage();
31
32 CppVoidResult result;
33 if (!init_result.ok()) {
34 result.error_message = init_result.error().message();
35 result.status = CppResultStatus::Err;
36 } else {
37 result.status = CppResultStatus::Ok;
38 }
39 return result;
40 }
41
initialize_mainline_storage() const42 CppVoidResult CppAconfigd::initialize_mainline_storage() const {
43 auto init_result = impl->m_aconfigd->InitializeMainlineStorage();
44
45 CppVoidResult result;
46 if (!init_result.ok()) {
47 result.error_message = init_result.error().message();
48 result.status = CppResultStatus::Err;
49 } else {
50 result.status = CppResultStatus::Ok;
51 }
52 return result;
53 }
54
initialize_in_memory_storage_records() const55 CppVoidResult CppAconfigd::initialize_in_memory_storage_records() const {
56 auto init_result = impl->m_aconfigd->InitializeInMemoryStorageRecords();
57
58 CppVoidResult result;
59 if (!init_result.ok()) {
60 result.error_message = init_result.error().message();
61 result.status = CppResultStatus::Err;
62 } else {
63 result.status = CppResultStatus::Ok;
64 }
65 return result;
66 }
67
handle_socket_request(const std::string & messages_string) const68 CppStringResult CppAconfigd::handle_socket_request(
69 const std::string& messages_string) const {
70 auto request_messages = android::aconfigd::StorageRequestMessages{};
71 request_messages.ParseFromString(messages_string);
72
73 auto return_messages = android::aconfigd::StorageReturnMessages();
74 for (auto& request : request_messages.msgs()) {
75 auto* return_msg = return_messages.add_msgs();
76 auto result = impl->m_aconfigd->HandleSocketRequest(request, *return_msg);
77 if (!result.ok()) {
78 auto* errmsg = return_msg->mutable_error_message();
79 *errmsg = result.error().message();
80 }
81 }
82
83 auto content = std::string();
84 return_messages.SerializeToString(&content);
85
86 CppStringResult result;
87 result.data = std::make_unique<std::string>(content);
88 result.status = CppResultStatus::Ok;
89 return result;
90 }
91
new_cpp_aconfigd(const std::string & str1,const std::string & str2)92 std::unique_ptr<CppAconfigd> new_cpp_aconfigd(const std::string& str1,
93 const std::string& str2) {
94 return std::make_unique<CppAconfigd>(str1, str2);
95 }
96
97 } // namespace aconfigdwrapper
98