Add Release Assets to GitHub Release object

This commit is contained in:
Dan Paulat 2024-03-18 23:23:09 -05:00
parent b025b29161
commit 8d706c463c
2 changed files with 37 additions and 3 deletions

View file

@ -11,10 +11,25 @@ namespace types
namespace gh namespace gh
{ {
ReleaseAsset tag_invoke(boost::json::value_to_tag<ReleaseAsset>,
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<Release>, Release tag_invoke(boost::json::value_to_tag<Release>,
const boost::json::value& jv) const boost::json::value& jv)
{ {
auto jo = jv.as_object(); auto& jo = jv.as_object();
Release release {}; Release release {};
@ -24,6 +39,9 @@ Release tag_invoke(boost::json::value_to_tag<Release>,
release.draft_ = jo.at("draft").as_bool(); release.draft_ = jo.at("draft").as_bool();
release.prerelease_ = jo.at("prerelease").as_bool(); release.prerelease_ = jo.at("prerelease").as_bool();
release.assets_ =
boost::json::value_to<std::vector<ReleaseAsset>>(jo.at("assets"));
// Optional parameters // Optional parameters
if (jo.contains("body")) if (jo.contains("body"))
{ {

View file

@ -13,6 +13,18 @@ namespace types
namespace gh namespace gh
{ {
/**
* @brief GitHub Release Asset object
*
* <https://docs.github.com/en/rest/releases/assets?apiVersion=2022-11-28>
*/
struct ReleaseAsset
{
std::string name_ {};
std::string contentType_ {};
std::string browserDownloadUrl_ {};
};
/** /**
* @brief GitHub Release object * @brief GitHub Release object
* *
@ -25,10 +37,14 @@ struct Release
std::string body_ {}; std::string body_ {};
bool draft_ {}; bool draft_ {};
bool prerelease_ {}; bool prerelease_ {};
std::vector<ReleaseAsset> assets_ {};
}; };
Release tag_invoke(boost::json::value_to_tag<Release>, ReleaseAsset tag_invoke(boost::json::value_to_tag<ReleaseAsset>,
const boost::json::value& jv); const boost::json::value& jv);
Release tag_invoke(boost::json::value_to_tag<Release>,
const boost::json::value& jv);
} // namespace gh } // namespace gh
} // namespace types } // namespace types