diff options
Diffstat (limited to 'cast/common/channel/message_util.h')
-rw-r--r-- | cast/common/channel/message_util.h | 93 |
1 files changed, 36 insertions, 57 deletions
diff --git a/cast/common/channel/message_util.h b/cast/common/channel/message_util.h index 8e8fe823..6eef5b11 100644 --- a/cast/common/channel/message_util.h +++ b/cast/common/channel/message_util.h @@ -9,6 +9,11 @@ #include "absl/strings/string_view.h" #include "cast/common/channel/proto/cast_channel.pb.h" +#include "util/enum_name_table.h" + +namespace Json { +class Value; +} namespace openscreen { namespace cast { @@ -158,63 +163,35 @@ enum class AppAvailabilityResult { std::string ToString(AppAvailabilityResult availability); -// TODO(crbug.com/openscreen/111): When this and/or other enums need the -// string->enum mapping, import EnumTable from Chromium's -// //components/cast_channel/enum_table.h. -inline constexpr const char* CastMessageTypeToString(CastMessageType type) { - switch (type) { - case CastMessageType::kPing: - return "PING"; - case CastMessageType::kPong: - return "PONG"; - case CastMessageType::kRpc: - return "RPC"; - case CastMessageType::kGetAppAvailability: - return "GET_APP_AVAILABILITY"; - case CastMessageType::kGetStatus: - return "GET_STATUS"; - case CastMessageType::kConnect: - return "CONNECT"; - case CastMessageType::kCloseConnection: - return "CLOSE"; - case CastMessageType::kBroadcast: - return "APPLICATION_BROADCAST"; - case CastMessageType::kLaunch: - return "LAUNCH"; - case CastMessageType::kStop: - return "STOP"; - case CastMessageType::kReceiverStatus: - return "RECEIVER_STATUS"; - case CastMessageType::kMediaStatus: - return "MEDIA_STATUS"; - case CastMessageType::kLaunchError: - return "LAUNCH_ERROR"; - case CastMessageType::kOffer: - return "OFFER"; - case CastMessageType::kAnswer: - return "ANSWER"; - case CastMessageType::kCapabilitiesResponse: - return "CAPABILITIES_RESPONSE"; - case CastMessageType::kStatusResponse: - return "STATUS_RESPONSE"; - case CastMessageType::kMultizoneStatus: - return "MULTIZONE_STATUS"; - case CastMessageType::kInvalidPlayerState: - return "INVALID_PLAYER_STATE"; - case CastMessageType::kLoadFailed: - return "LOAD_FAILED"; - case CastMessageType::kLoadCancelled: - return "LOAD_CANCELLED"; - case CastMessageType::kInvalidRequest: - return "INVALID_REQUEST"; - case CastMessageType::kPresentation: - return "PRESENTATION"; - case CastMessageType::kGetCapabilities: - return "GET_CAPABILITIES"; - case CastMessageType::kOther: - default: - return "OTHER"; - } +static const EnumNameTable<CastMessageType, 25> kCastMessageTypeNames{ + {{"PING", CastMessageType::kPing}, + {"PONG", CastMessageType::kPong}, + {"RPC", CastMessageType::kRpc}, + {"GET_APP_AVAILABILITY", CastMessageType::kGetAppAvailability}, + {"GET_STATUS", CastMessageType::kGetStatus}, + {"CONNECT", CastMessageType::kConnect}, + {"CLOSE", CastMessageType::kCloseConnection}, + {"APPLICATION_BROADCAST", CastMessageType::kBroadcast}, + {"LAUNCH", CastMessageType::kLaunch}, + {"STOP", CastMessageType::kStop}, + {"RECEIVER_STATUS", CastMessageType::kReceiverStatus}, + {"MEDIA_STATUS", CastMessageType::kMediaStatus}, + {"LAUNCH_ERROR", CastMessageType::kLaunchError}, + {"OFFER", CastMessageType::kOffer}, + {"ANSWER", CastMessageType::kAnswer}, + {"CAPABILITIES_RESPONSE", CastMessageType::kCapabilitiesResponse}, + {"STATUS_RESPONSE", CastMessageType::kStatusResponse}, + {"MULTIZONE_STATUS", CastMessageType::kMultizoneStatus}, + {"INVALID_PLAYER_STATE", CastMessageType::kInvalidPlayerState}, + {"LOAD_FAILED", CastMessageType::kLoadFailed}, + {"LOAD_CANCELLED", CastMessageType::kLoadCancelled}, + {"INVALID_REQUEST", CastMessageType::kInvalidRequest}, + {"PRESENTATION", CastMessageType::kPresentation}, + {"GET_CAPABILITIES", CastMessageType::kGetCapabilities}, + {"OTHER", CastMessageType::kOther}}}; + +inline const char* CastMessageTypeToString(CastMessageType type) { + return GetEnumName(kCastMessageTypeNames, type).value("OTHER"); } inline bool IsAuthMessage(const ::cast::channel::CastMessage& message) { @@ -242,6 +219,8 @@ inline bool IsTransportNamespace(absl::string_view namespace_) { // |prefix| of "sender" will result in a string like "sender-12345". std::string MakeUniqueSessionId(const char* prefix); +// Returns true if the type field in |object| is set to the given |type|. +bool HasType(const Json::Value& object, CastMessageType type); } // namespace cast } // namespace openscreen |