#if !defined(_CRT_SECURE_NO_WARNINGS) #define _CRT_SECURE_NO_WARNINGS #endif #include "relationship_manager.h" #include "core.h" #include #include namespace discord { class RelationshipEvents final { public: static void OnRefresh(void* callbackData) { auto* core = reinterpret_cast(callbackData); if (!core) { return; } auto& module = core->RelationshipManager(); module.OnRefresh(); } static void OnRelationshipUpdate(void* callbackData, DiscordRelationship* relationship) { auto* core = reinterpret_cast(callbackData); if (!core) { return; } auto& module = core->RelationshipManager(); module.OnRelationshipUpdate(*reinterpret_cast(relationship)); } }; IDiscordRelationshipEvents RelationshipManager::events_{ &RelationshipEvents::OnRefresh, &RelationshipEvents::OnRelationshipUpdate, }; void RelationshipManager::Filter(std::function filter) { static auto wrapper = [](void* callbackData, DiscordRelationship* relationship) -> bool { auto cb(reinterpret_cast*>(callbackData)); if (!cb || !(*cb)) { return {}; } return (*cb)(*reinterpret_cast(relationship)); }; std::unique_ptr> cb{}; cb.reset(new std::function(std::move(filter))); internal_->filter(internal_, cb.get(), wrapper); } Result RelationshipManager::Count(std::int32_t* count) { if (!count) { return Result::InternalError; } auto result = internal_->count(internal_, reinterpret_cast(count)); return static_cast(result); } Result RelationshipManager::Get(UserId userId, Relationship* relationship) { if (!relationship) { return Result::InternalError; } auto result = internal_->get(internal_, userId, reinterpret_cast(relationship)); return static_cast(result); } Result RelationshipManager::GetAt(std::uint32_t index, Relationship* relationship) { if (!relationship) { return Result::InternalError; } auto result = internal_->get_at(internal_, index, reinterpret_cast(relationship)); return static_cast(result); } } // namespace discord