aboutsummaryrefslogtreecommitdiff
path: root/cast/common/channel/message_util.h
diff options
context:
space:
mode:
Diffstat (limited to 'cast/common/channel/message_util.h')
-rw-r--r--cast/common/channel/message_util.h93
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