1#include <nlohmann/json.hpp>
2
3#include "mtx/events/ephemeral/receipt.hpp"
4
5namespace mtx {
6namespace events {
7namespace ephemeral {
8
9void
10from_json(const nlohmann::json &obj, Receipt &content)
11{
12 for (const auto &eventReceipts : obj.items()) {
13 for (const auto &receiptsByType : eventReceipts.value().items()) {
14 Receipt::ReceiptType t = Receipt::Read;
15 if (receiptsByType.key() == "m.read")
16 t = Receipt::Read;
17 else if (receiptsByType.key() == "m.read.private" ||
18 receiptsByType.key() == "org.matrix.msc2285.read.private")
19 t = Receipt::ReadPrivate;
20 else
21 continue;
22
23 for (const auto &userReceipts : receiptsByType.value().items()) {
24 content.receipts[eventReceipts.key()][t].users[userReceipts.key()].ts =
25 userReceipts.value().value<uint64_t>(key: "ts", default_value: 0);
26 }
27 }
28 }
29}
30
31void
32to_json(nlohmann::json &obj, const Receipt &content)
33{
34 for (const auto &[event_id, receiptsByType] : content.receipts) {
35 for (const auto &[receiptType, userReceipts] : receiptsByType) {
36 for (const auto &[user_id, receipt] : userReceipts.users) {
37 if (receiptType == Receipt::ReceiptType::Read)
38 obj[event_id]["m.read"][user_id]["ts"] = receipt.ts;
39 else if (receiptType == Receipt::ReceiptType::ReadPrivate)
40
41 obj[event_id]["m.read.private"][user_id]["ts"] = receipt.ts;
42 }
43 }
44 }
45}
46
47} // namespace state
48} // namespace events
49} // namespace mtx
50