src/native/diffs/api/diffa_api.cpp (80 lines of code) (raw):
/**
* @file diffa_api.cpp
*
* @copyright Copyright (c) Microsoft Corporation.
* Licensed under the MIT License.
*/
#include <memory>
#include <errors/user_exception.h>
#include "diffa_api.h"
#include "apply_session.h"
#include <diffs/core/item_definition.h>
#include <aduapi_type_conversion.h>
ADUAPI_LINKAGESPEC diffa_handle CDECL diffa_open_session()
{
auto session = std::make_unique<archive_diff::diffs::api::apply_session>();
return reinterpret_cast<diffa_handle>(session.release());
}
ADUAPI_LINKAGESPEC void CDECL diffa_close_session(diffa_handle handle)
{
auto session = reinterpret_cast<archive_diff::diffs::api::apply_session *>(handle);
delete session;
}
ADUAPI_LINKAGESPEC uint32_t CDECL diffa_add_archive(diffa_handle handle, const char *path)
{
auto session = reinterpret_cast<archive_diff::diffs::api::apply_session *>(handle);
return session->add_archive(path);
}
ADUAPI_LINKAGESPEC uint32_t CDECL diffa_request_item(diffa_handle handle, const diffc_item_definition *item)
{
auto session = reinterpret_cast<archive_diff::diffs::api::apply_session *>(handle);
auto converted_item = diffc_item_definition_to_core_item_definition(*item);
return session->request_item(converted_item);
}
ADUAPI_LINKAGESPEC uint32_t CDECL diffa_add_file_to_pantry(diffa_handle handle, const char *path)
{
auto session = reinterpret_cast<archive_diff::diffs::api::apply_session *>(handle);
return session->add_file_to_pantry(path);
}
ADUAPI_LINKAGESPEC uint32_t CDECL diffa_clear_requested_items(diffa_handle handle)
{
auto session = reinterpret_cast<archive_diff::diffs::api::apply_session *>(handle);
return session->clear_requested_items();
}
ADUAPI_LINKAGESPEC uint32_t CDECL diffa_process_requested_items(diffa_handle handle)
{
auto session = reinterpret_cast<archive_diff::diffs::api::apply_session *>(handle);
return session->process_requested_items() ? 1 : 0;
}
ADUAPI_LINKAGESPEC uint32_t CDECL diffa_process_requested_items_ex(
diffa_handle handle, bool select_recipes_only, const diffc_item_definition **mocked_items, size_t mocked_item_count)
{
auto session = reinterpret_cast<archive_diff::diffs::api::apply_session *>(handle);
return session->process_requested_items(select_recipes_only, mocked_items, mocked_item_count);
}
ADUAPI_LINKAGESPEC uint32_t CDECL diffa_save_selected_recipes(diffa_handle handle, const char *path)
{
auto session = reinterpret_cast<archive_diff::diffs::api::apply_session *>(handle);
return session->save_selected_recipes(path);
}
ADUAPI_LINKAGESPEC uint32_t CDECL diffa_resume_slicing(diffa_handle handle)
{
auto session = reinterpret_cast<archive_diff::diffs::api::apply_session *>(handle);
return session->resume_slicing();
}
ADUAPI_LINKAGESPEC uint32_t CDECL diffa_cancel_slicing(diffa_handle handle)
{
auto session = reinterpret_cast<archive_diff::diffs::api::apply_session *>(handle);
return session->cancel_slicing();
}
ADUAPI_LINKAGESPEC uint32_t CDECL
diffa_extract_item_to_path(diffa_handle handle, const diffc_item_definition *item, const char *path)
{
auto session = reinterpret_cast<archive_diff::diffs::api::apply_session *>(handle);
auto converted_item = diffc_item_definition_to_core_item_definition(*item);
return session->extract_item_to_path(converted_item, path);
}
ADUAPI_LINKAGESPEC uint32_t CDECL diffa_get_error_code(diffa_handle handle, uint32_t index)
{
auto session = reinterpret_cast<archive_diff::diffs::api::apply_session *>(handle);
return session->get_error_code(index);
}
ADUAPI_LINKAGESPEC const char *CDECL diffa_get_error_text(diffa_handle handle, uint32_t index)
{
auto session = reinterpret_cast<archive_diff::diffs::api::apply_session *>(handle);
return session->get_error_text(index);
}