Chatterino
Base.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <QJsonDocument>
4 #include <QJsonObject>
5 #include <QString>
6 
7 #include <magic_enum.hpp>
8 
9 #include <boost/optional.hpp>
10 
11 namespace chatterino {
12 
13 struct PubSubMessage {
14  enum class Type {
15  Pong,
16  Response,
17  Message,
18 
19  INVALID,
20  };
21 
22  QJsonObject object;
23 
24  QString nonce;
25  QString error;
26  QString typeString;
28 
29  PubSubMessage(QJsonObject _object);
30 
31  template <class InnerClass>
32  boost::optional<InnerClass> toInner();
33 };
34 
35 template <class InnerClass>
36 boost::optional<InnerClass> PubSubMessage::toInner()
37 {
38  auto dataValue = this->object.value("data");
39  if (!dataValue.isObject())
40  {
41  return boost::none;
42  }
43 
44  auto data = dataValue.toObject();
45 
46  return InnerClass{this->nonce, data};
47 }
48 
49 static boost::optional<PubSubMessage> parsePubSubBaseMessage(
50  const QString &blob)
51 {
52  QJsonDocument jsonDoc(QJsonDocument::fromJson(blob.toUtf8()));
53 
54  if (jsonDoc.isNull())
55  {
56  return boost::none;
57  }
58 
59  return PubSubMessage(jsonDoc.object());
60 }
61 
62 } // namespace chatterino
63 
64 template <>
65 constexpr magic_enum::customize::customize_t
66  magic_enum::customize::enum_name<chatterino::PubSubMessage::Type>(
67  chatterino::PubSubMessage::Type value) noexcept
68 {
69  switch (value)
70  {
72  return "PONG";
73 
75  return "RESPONSE";
76 
78  return "MESSAGE";
79 
80  default:
81  return default_tag;
82  }
83 }
QString error
Definition: Base.hpp:25
Type
Definition: Base.hpp:14
QString nonce
Definition: Base.hpp:24
Type type
Definition: Base.hpp:27
QJsonObject object
Definition: Base.hpp:22
boost::optional< InnerClass > toInner()
Definition: Base.hpp:36
Definition: Application.cpp:48
QString typeString
Definition: Base.hpp:26
Definition: Base.hpp:13
PubSubMessage(QJsonObject _object)
Definition: Base.cpp:5