From 8d706c463c5deb9e23a8db56cb4f232ba0bd21c8 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Mon, 18 Mar 2024 23:23:09 -0500 Subject: [PATCH] Add Release Assets to GitHub Release object --- scwx-qt/source/scwx/qt/types/github_types.cpp | 20 ++++++++++++++++++- scwx-qt/source/scwx/qt/types/github_types.hpp | 20 +++++++++++++++++-- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/scwx-qt/source/scwx/qt/types/github_types.cpp b/scwx-qt/source/scwx/qt/types/github_types.cpp index e741c23b..f0f241f1 100644 --- a/scwx-qt/source/scwx/qt/types/github_types.cpp +++ b/scwx-qt/source/scwx/qt/types/github_types.cpp @@ -11,10 +11,25 @@ namespace types namespace gh { +ReleaseAsset tag_invoke(boost::json::value_to_tag, + const boost::json::value& jv) +{ + auto& jo = jv.as_object(); + + ReleaseAsset asset {}; + + // Required parameters + asset.name_ = jo.at("name").as_string(); + asset.contentType_ = jo.at("content_type").as_string(); + asset.browserDownloadUrl_ = jo.at("browser_download_url").as_string(); + + return asset; +} + Release tag_invoke(boost::json::value_to_tag, const boost::json::value& jv) { - auto jo = jv.as_object(); + auto& jo = jv.as_object(); Release release {}; @@ -24,6 +39,9 @@ Release tag_invoke(boost::json::value_to_tag, release.draft_ = jo.at("draft").as_bool(); release.prerelease_ = jo.at("prerelease").as_bool(); + release.assets_ = + boost::json::value_to>(jo.at("assets")); + // Optional parameters if (jo.contains("body")) { diff --git a/scwx-qt/source/scwx/qt/types/github_types.hpp b/scwx-qt/source/scwx/qt/types/github_types.hpp index 829cfd28..b5fcfaee 100644 --- a/scwx-qt/source/scwx/qt/types/github_types.hpp +++ b/scwx-qt/source/scwx/qt/types/github_types.hpp @@ -13,6 +13,18 @@ namespace types namespace gh { +/** + * @brief GitHub Release Asset object + * + * + */ +struct ReleaseAsset +{ + std::string name_ {}; + std::string contentType_ {}; + std::string browserDownloadUrl_ {}; +}; + /** * @brief GitHub Release object * @@ -25,10 +37,14 @@ struct Release std::string body_ {}; bool draft_ {}; bool prerelease_ {}; + + std::vector assets_ {}; }; -Release tag_invoke(boost::json::value_to_tag, - const boost::json::value& jv); +ReleaseAsset tag_invoke(boost::json::value_to_tag, + const boost::json::value& jv); +Release tag_invoke(boost::json::value_to_tag, + const boost::json::value& jv); } // namespace gh } // namespace types