Skip to content

Commit 774ba19

Browse files
feat(ffi): Add support for serializing/deserializing auto-generated key-value pairs in the new IR format (resolves #556). (#653)
Co-authored-by: kirkrodrigues <[email protected]>
1 parent 5c96bdc commit 774ba19

9 files changed

+620
-296
lines changed

components/core/src/clp/ffi/ir_stream/Deserializer.hpp

+11-4
Original file line numberDiff line numberDiff line change
@@ -211,18 +211,25 @@ auto Deserializer<IrUnitHandler>::deserialize_next_ir_unit(ReaderInterface& read
211211
return result.error();
212212
}
213213

214-
auto const node_locator{result.value()};
215-
if (m_user_gen_keys_schema_tree->has_node(node_locator)) {
214+
auto const& [is_auto_generated, node_locator]{result.value()};
215+
auto& schema_tree_to_insert{
216+
is_auto_generated ? m_auto_gen_keys_schema_tree : m_user_gen_keys_schema_tree
217+
};
218+
219+
if (schema_tree_to_insert->has_node(node_locator)) {
216220
return std::errc::protocol_error;
217221
}
218222

219-
if (auto const err{m_ir_unit_handler.handle_schema_tree_node_insertion(node_locator)};
223+
if (auto const err{m_ir_unit_handler.handle_schema_tree_node_insertion(
224+
is_auto_generated,
225+
node_locator
226+
)};
220227
IRErrorCode::IRErrorCode_Success != err)
221228
{
222229
return ir_error_code_to_errc(err);
223230
}
224231

225-
std::ignore = m_user_gen_keys_schema_tree->insert_node(node_locator);
232+
std::ignore = schema_tree_to_insert->insert_node(node_locator);
226233
break;
227234
}
228235

components/core/src/clp/ffi/ir_stream/IrUnitHandlerInterface.hpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ template <typename Handler>
1717
concept IrUnitHandlerInterface = requires(
1818
Handler handler,
1919
KeyValuePairLogEvent&& log_event,
20+
bool is_auto_generated,
2021
UtcOffset utc_offset_old,
2122
UtcOffset utc_offset_new,
2223
SchemaTree::NodeLocator schema_tree_node_locator
@@ -42,11 +43,12 @@ concept IrUnitHandlerInterface = requires(
4243

4344
/**
4445
* Handles a schema tree node insertion IR unit.
46+
* @param is_auto_generated Whether the node is from the auto-gen keys schema tree.
4547
* @param schema_tree_node_locator The locator of the node to insert.
4648
* @return IRErrorCode::Success on success, user-defined error code on failures.
4749
*/
4850
{
49-
handler.handle_schema_tree_node_insertion(schema_tree_node_locator)
51+
handler.handle_schema_tree_node_insertion(is_auto_generated, schema_tree_node_locator)
5052
} -> std::same_as<IRErrorCode>;
5153

5254
/**

0 commit comments

Comments
 (0)