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
{
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>,
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>,
release.draft_ = jo.at("draft").as_bool();
release.prerelease_ = jo.at("prerelease").as_bool();
release.assets_ =
boost::json::value_to<std::vector<ReleaseAsset>>(jo.at("assets"));
// Optional parameters
if (jo.contains("body"))
{

View file

@ -13,6 +13,18 @@ namespace types
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
*
@ -25,10 +37,14 @@ struct Release
std::string body_ {};
bool draft_ {};
bool prerelease_ {};
std::vector<ReleaseAsset> assets_ {};
};
Release tag_invoke(boost::json::value_to_tag<Release>,
const boost::json::value& jv);
ReleaseAsset tag_invoke(boost::json::value_to_tag<ReleaseAsset>,
const boost::json::value& jv);
Release tag_invoke(boost::json::value_to_tag<Release>,
const boost::json::value& jv);
} // namespace gh
} // namespace types