Files
chatterino2/lib/twitch-eventsub-ws/src/generated/payloads/session-welcome.cpp
2025-12-14 14:00:57 +00:00

87 lines
2.7 KiB
C++

// WARNING: This file is automatically generated. Any changes will be lost.
#include "twitch-eventsub-ws/payloads/session-welcome.hpp"
#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 <boost/json.hpp>
namespace chatterino::eventsub::lib::payload::session_welcome {
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 &outerRoot = jvRoot.get_object();
const auto *jvInnerRoot = outerRoot.if_contains("session");
if (jvInnerRoot == nullptr)
{
EVENTSUB_BAIL_HERE(error::Kind::InnerRootMissing);
}
if (!jvInnerRoot->is_object())
{
EVENTSUB_BAIL_HERE(error::Kind::ExpectedObject);
}
const auto &root = jvInnerRoot->get_object();
const auto *jvid = root.if_contains("id");
if (jvid == nullptr)
{
EVENTSUB_BAIL_HERE(error::Kind::FieldMissing);
}
auto id = boost::json::try_value_to<std::string>(*jvid);
if (id.has_error())
{
return id.error();
}
std::optional<std::string> reconnectURL = std::nullopt;
const auto *jvreconnectURL = root.if_contains("reconnect_url");
if (jvreconnectURL != nullptr && !jvreconnectURL->is_null())
{
auto treconnectURL =
boost::json::try_value_to<std::string>(*jvreconnectURL);
if (treconnectURL.has_error())
{
return treconnectURL.error();
}
reconnectURL = std::move(treconnectURL.value());
}
static_assert(
std::is_trivially_copyable_v<std::remove_reference_t<
decltype(std::declval<Payload>().keepaliveTimeoutSeconds)>>);
std::optional<int> keepaliveTimeoutSeconds = std::nullopt;
const auto *jvkeepaliveTimeoutSeconds =
root.if_contains("keepalive_timeout_seconds");
if (jvkeepaliveTimeoutSeconds != nullptr &&
!jvkeepaliveTimeoutSeconds->is_null())
{
auto tkeepaliveTimeoutSeconds =
boost::json::try_value_to<int>(*jvkeepaliveTimeoutSeconds);
if (tkeepaliveTimeoutSeconds.has_error())
{
return tkeepaliveTimeoutSeconds.error();
}
keepaliveTimeoutSeconds = tkeepaliveTimeoutSeconds.value();
}
return Payload{
.id = std::move(id.value()),
.reconnectURL = std::move(reconnectURL),
.keepaliveTimeoutSeconds = keepaliveTimeoutSeconds,
};
}
} // namespace chatterino::eventsub::lib::payload::session_welcome