#if !defined(_CRT_SECURE_NO_WARNINGS) #define _CRT_SECURE_NO_WARNINGS #endif #include "storage_manager.h" #include "core.h" #include #include namespace discord { Result StorageManager::Read(char const* name, std::uint8_t* data, std::uint32_t dataLength, std::uint32_t* read) { if (!read) { return Result::InternalError; } auto result = internal_->read(internal_, const_cast(name), reinterpret_cast(data), dataLength, reinterpret_cast(read)); return static_cast(result); } void StorageManager::ReadAsync(char const* name, std::function callback) { static auto wrapper = [](void* callbackData, EDiscordResult result, uint8_t* data, uint32_t dataLength) -> void { std::unique_ptr> cb( reinterpret_cast*>( callbackData)); if (!cb || !(*cb)) { return; } (*cb)(static_cast(result), data, dataLength); }; std::unique_ptr> cb{}; cb.reset(new std::function(std::move(callback))); internal_->read_async(internal_, const_cast(name), cb.release(), wrapper); } void StorageManager::ReadAsyncPartial( char const* name, std::uint64_t offset, std::uint64_t length, std::function callback) { static auto wrapper = [](void* callbackData, EDiscordResult result, uint8_t* data, uint32_t dataLength) -> void { std::unique_ptr> cb( reinterpret_cast*>( callbackData)); if (!cb || !(*cb)) { return; } (*cb)(static_cast(result), data, dataLength); }; std::unique_ptr> cb{}; cb.reset(new std::function(std::move(callback))); internal_->read_async_partial( internal_, const_cast(name), offset, length, cb.release(), wrapper); } Result StorageManager::Write(char const* name, std::uint8_t* data, std::uint32_t dataLength) { auto result = internal_->write( internal_, const_cast(name), reinterpret_cast(data), dataLength); return static_cast(result); } void StorageManager::WriteAsync(char const* name, std::uint8_t* data, std::uint32_t dataLength, std::function callback) { static auto wrapper = [](void* callbackData, EDiscordResult result) -> void { std::unique_ptr> cb( reinterpret_cast*>(callbackData)); if (!cb || !(*cb)) { return; } (*cb)(static_cast(result)); }; std::unique_ptr> cb{}; cb.reset(new std::function(std::move(callback))); internal_->write_async(internal_, const_cast(name), reinterpret_cast(data), dataLength, cb.release(), wrapper); } Result StorageManager::Delete(char const* name) { auto result = internal_->delete_(internal_, const_cast(name)); return static_cast(result); } Result StorageManager::Exists(char const* name, bool* exists) { if (!exists) { return Result::InternalError; } auto result = internal_->exists(internal_, const_cast(name), reinterpret_cast(exists)); return static_cast(result); } void StorageManager::Count(std::int32_t* count) { if (!count) { return; } internal_->count(internal_, reinterpret_cast(count)); } Result StorageManager::Stat(char const* name, FileStat* stat) { if (!stat) { return Result::InternalError; } auto result = internal_->stat(internal_, const_cast(name), reinterpret_cast(stat)); return static_cast(result); } Result StorageManager::StatAt(std::int32_t index, FileStat* stat) { if (!stat) { return Result::InternalError; } auto result = internal_->stat_at(internal_, index, reinterpret_cast(stat)); return static_cast(result); } Result StorageManager::GetPath(char path[4096]) { if (!path) { return Result::InternalError; } auto result = internal_->get_path(internal_, reinterpret_cast(path)); return static_cast(result); } } // namespace discord