271 lines
7.5 KiB
C++
271 lines
7.5 KiB
C++
// WARNING: This file is automatically generated. Any changes will be lost.
|
|
#include "twitch-eventsub-ws/chrono.hpp" // IWYU pragma: keep
|
|
#include "twitch-eventsub-ws/detail/errors.hpp"
|
|
#include "twitch-eventsub-ws/detail/variant.hpp" // IWYU pragma: keep
|
|
#include "twitch-eventsub-ws/payloads/channel-ban-v1.hpp"
|
|
|
|
#include <boost/json.hpp>
|
|
|
|
namespace chatterino::eventsub::lib::payload::channel_ban::v1 {
|
|
|
|
boost::json::result_for<Event, boost::json::value>::type tag_invoke(
|
|
boost::json::try_value_to_tag<Event> /* tag */,
|
|
const boost::json::value &jvRoot)
|
|
{
|
|
if (!jvRoot.is_object())
|
|
{
|
|
EVENTSUB_BAIL_HERE(error::Kind::ExpectedObject);
|
|
}
|
|
const auto &root = jvRoot.get_object();
|
|
|
|
const auto *jvbroadcasterUserID = root.if_contains("broadcaster_user_id");
|
|
if (jvbroadcasterUserID == nullptr)
|
|
{
|
|
EVENTSUB_BAIL_HERE(error::Kind::FieldMissing);
|
|
}
|
|
|
|
auto broadcasterUserID =
|
|
boost::json::try_value_to<std::string>(*jvbroadcasterUserID);
|
|
|
|
if (broadcasterUserID.has_error())
|
|
{
|
|
return broadcasterUserID.error();
|
|
}
|
|
|
|
const auto *jvbroadcasterUserLogin =
|
|
root.if_contains("broadcaster_user_login");
|
|
if (jvbroadcasterUserLogin == nullptr)
|
|
{
|
|
EVENTSUB_BAIL_HERE(error::Kind::FieldMissing);
|
|
}
|
|
|
|
auto broadcasterUserLogin =
|
|
boost::json::try_value_to<std::string>(*jvbroadcasterUserLogin);
|
|
|
|
if (broadcasterUserLogin.has_error())
|
|
{
|
|
return broadcasterUserLogin.error();
|
|
}
|
|
|
|
const auto *jvbroadcasterUserName =
|
|
root.if_contains("broadcaster_user_name");
|
|
if (jvbroadcasterUserName == nullptr)
|
|
{
|
|
EVENTSUB_BAIL_HERE(error::Kind::FieldMissing);
|
|
}
|
|
|
|
auto broadcasterUserName =
|
|
boost::json::try_value_to<std::string>(*jvbroadcasterUserName);
|
|
|
|
if (broadcasterUserName.has_error())
|
|
{
|
|
return broadcasterUserName.error();
|
|
}
|
|
|
|
const auto *jvmoderatorUserID = root.if_contains("moderator_user_id");
|
|
if (jvmoderatorUserID == nullptr)
|
|
{
|
|
EVENTSUB_BAIL_HERE(error::Kind::FieldMissing);
|
|
}
|
|
|
|
auto moderatorUserID =
|
|
boost::json::try_value_to<std::string>(*jvmoderatorUserID);
|
|
|
|
if (moderatorUserID.has_error())
|
|
{
|
|
return moderatorUserID.error();
|
|
}
|
|
|
|
const auto *jvmoderatorUserLogin = root.if_contains("moderator_user_login");
|
|
if (jvmoderatorUserLogin == nullptr)
|
|
{
|
|
EVENTSUB_BAIL_HERE(error::Kind::FieldMissing);
|
|
}
|
|
|
|
auto moderatorUserLogin =
|
|
boost::json::try_value_to<std::string>(*jvmoderatorUserLogin);
|
|
|
|
if (moderatorUserLogin.has_error())
|
|
{
|
|
return moderatorUserLogin.error();
|
|
}
|
|
|
|
const auto *jvmoderatorUserName = root.if_contains("moderator_user_name");
|
|
if (jvmoderatorUserName == nullptr)
|
|
{
|
|
EVENTSUB_BAIL_HERE(error::Kind::FieldMissing);
|
|
}
|
|
|
|
auto moderatorUserName =
|
|
boost::json::try_value_to<std::string>(*jvmoderatorUserName);
|
|
|
|
if (moderatorUserName.has_error())
|
|
{
|
|
return moderatorUserName.error();
|
|
}
|
|
|
|
const auto *jvuserID = root.if_contains("user_id");
|
|
if (jvuserID == nullptr)
|
|
{
|
|
EVENTSUB_BAIL_HERE(error::Kind::FieldMissing);
|
|
}
|
|
|
|
auto userID = boost::json::try_value_to<std::string>(*jvuserID);
|
|
|
|
if (userID.has_error())
|
|
{
|
|
return userID.error();
|
|
}
|
|
|
|
const auto *jvuserLogin = root.if_contains("user_login");
|
|
if (jvuserLogin == nullptr)
|
|
{
|
|
EVENTSUB_BAIL_HERE(error::Kind::FieldMissing);
|
|
}
|
|
|
|
auto userLogin = boost::json::try_value_to<std::string>(*jvuserLogin);
|
|
|
|
if (userLogin.has_error())
|
|
{
|
|
return userLogin.error();
|
|
}
|
|
|
|
const auto *jvuserName = root.if_contains("user_name");
|
|
if (jvuserName == nullptr)
|
|
{
|
|
EVENTSUB_BAIL_HERE(error::Kind::FieldMissing);
|
|
}
|
|
|
|
auto userName = boost::json::try_value_to<std::string>(*jvuserName);
|
|
|
|
if (userName.has_error())
|
|
{
|
|
return userName.error();
|
|
}
|
|
|
|
const auto *jvreason = root.if_contains("reason");
|
|
if (jvreason == nullptr)
|
|
{
|
|
EVENTSUB_BAIL_HERE(error::Kind::FieldMissing);
|
|
}
|
|
|
|
auto reason = boost::json::try_value_to<std::string>(*jvreason);
|
|
|
|
if (reason.has_error())
|
|
{
|
|
return reason.error();
|
|
}
|
|
|
|
static_assert(std::is_trivially_copyable_v<std::remove_reference_t<
|
|
decltype(std::declval<Event>().isPermanent)>>);
|
|
const auto *jvisPermanent = root.if_contains("is_permanent");
|
|
if (jvisPermanent == nullptr)
|
|
{
|
|
EVENTSUB_BAIL_HERE(error::Kind::FieldMissing);
|
|
}
|
|
|
|
auto isPermanent = boost::json::try_value_to<bool>(*jvisPermanent);
|
|
|
|
if (isPermanent.has_error())
|
|
{
|
|
return isPermanent.error();
|
|
}
|
|
|
|
static_assert(
|
|
std::is_trivially_copyable_v<
|
|
std::remove_reference_t<decltype(std::declval<Event>().bannedAt)>>);
|
|
const auto *jvbannedAt = root.if_contains("banned_at");
|
|
if (jvbannedAt == nullptr)
|
|
{
|
|
EVENTSUB_BAIL_HERE(error::Kind::FieldMissing);
|
|
}
|
|
|
|
auto bannedAt =
|
|
boost::json::try_value_to<std::chrono::system_clock::time_point>(
|
|
*jvbannedAt, AsISO8601());
|
|
|
|
if (bannedAt.has_error())
|
|
{
|
|
return bannedAt.error();
|
|
}
|
|
|
|
static_assert(
|
|
std::is_trivially_copyable_v<
|
|
std::remove_reference_t<decltype(std::declval<Event>().endsAt)>>);
|
|
std::optional<std::chrono::system_clock::time_point> endsAt = std::nullopt;
|
|
const auto *jvendsAt = root.if_contains("ends_at");
|
|
if (jvendsAt != nullptr && !jvendsAt->is_null())
|
|
{
|
|
auto tendsAt =
|
|
boost::json::try_value_to<std::chrono::system_clock::time_point>(
|
|
*jvendsAt, AsISO8601());
|
|
|
|
if (tendsAt.has_error())
|
|
{
|
|
return tendsAt.error();
|
|
}
|
|
endsAt = tendsAt.value();
|
|
}
|
|
|
|
return Event{
|
|
.broadcasterUserID = std::move(broadcasterUserID.value()),
|
|
.broadcasterUserLogin = std::move(broadcasterUserLogin.value()),
|
|
.broadcasterUserName = std::move(broadcasterUserName.value()),
|
|
.moderatorUserID = std::move(moderatorUserID.value()),
|
|
.moderatorUserLogin = std::move(moderatorUserLogin.value()),
|
|
.moderatorUserName = std::move(moderatorUserName.value()),
|
|
.userID = std::move(userID.value()),
|
|
.userLogin = std::move(userLogin.value()),
|
|
.userName = std::move(userName.value()),
|
|
.reason = std::move(reason.value()),
|
|
.isPermanent = isPermanent.value(),
|
|
.bannedAt = bannedAt.value(),
|
|
.endsAt = endsAt,
|
|
};
|
|
}
|
|
|
|
boost::json::result_for<Payload, boost::json::value>::type tag_invoke(
|
|
boost::json::try_value_to_tag<Payload> /* tag */,
|
|
const boost::json::value &jvRoot)
|
|
{
|
|
if (!jvRoot.is_object())
|
|
{
|
|
EVENTSUB_BAIL_HERE(error::Kind::ExpectedObject);
|
|
}
|
|
const auto &root = jvRoot.get_object();
|
|
|
|
const auto *jvsubscription = root.if_contains("subscription");
|
|
if (jvsubscription == nullptr)
|
|
{
|
|
EVENTSUB_BAIL_HERE(error::Kind::FieldMissing);
|
|
}
|
|
|
|
auto subscription =
|
|
boost::json::try_value_to<subscription::Subscription>(*jvsubscription);
|
|
|
|
if (subscription.has_error())
|
|
{
|
|
return subscription.error();
|
|
}
|
|
|
|
const auto *jvevent = root.if_contains("event");
|
|
if (jvevent == nullptr)
|
|
{
|
|
EVENTSUB_BAIL_HERE(error::Kind::FieldMissing);
|
|
}
|
|
|
|
auto event = boost::json::try_value_to<Event>(*jvevent);
|
|
|
|
if (event.has_error())
|
|
{
|
|
return event.error();
|
|
}
|
|
|
|
return Payload{
|
|
.subscription = std::move(subscription.value()),
|
|
.event = std::move(event.value()),
|
|
};
|
|
}
|
|
|
|
} // namespace chatterino::eventsub::lib::payload::channel_ban::v1
|