Skip to content

Commit 4d3e304

Browse files
committed
custom fields serialization
1 parent 32f87dc commit 4d3e304

File tree

2 files changed

+79
-0
lines changed

2 files changed

+79
-0
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
#include "Server/GASerialize.h"
2+
3+
namespace gameanalytics
4+
{
5+
json serializeCustomFields(CustomFields const& customFields)
6+
{
7+
json j;
8+
9+
for(auto& [key, field]: customFields.fields)
10+
{
11+
switch(field.value.index())
12+
{
13+
case CustomFields::Value::value_int:
14+
j[key] = std::get<int64_t>(field.value);
15+
break;
16+
17+
case CustomFields::Value::value_float:
18+
j[key] = std::get<double>(field.value);
19+
break;
20+
21+
case CustomFields::Value::value_str:
22+
j[key] = std::get<std::string>(field.value);
23+
break;
24+
25+
case CustomFields::Value::value_bool:
26+
j[key] = std::get<bool>(field.value);
27+
break;
28+
}
29+
}
30+
31+
return j;
32+
}
33+
34+
CustomFields deserializeCustomFields(json const& jsonFields)
35+
{
36+
CustomFields customFields;
37+
38+
for(auto& item: jsonFields.items())
39+
{
40+
CustomFields::Value f;
41+
f.key = item.key();
42+
43+
if(item.value().is_boolean())
44+
{
45+
f.value = item.value().get<bool>();
46+
}
47+
else if(item.value().is_number_float())
48+
{
49+
f.value = item.value().get<double>();
50+
}
51+
else if(item.value().is_number_integer())
52+
{
53+
f.value = item.value().get<int64_t>();
54+
}
55+
else if(item.value().is_string())
56+
{
57+
f.value = item.value().get<std::string>();
58+
}
59+
else // unsupported value
60+
{
61+
continue;
62+
}
63+
64+
customFields.fields[f.key] = std::move(f);
65+
}
66+
67+
return customFields;
68+
}
69+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#pragma once
2+
3+
#include "GACommon.h"
4+
#include "Server/GACustomFields.h"
5+
6+
namespace gameanalytics
7+
{
8+
json serializeCustomFields(CustomFields const& customFields);
9+
CustomFields deserializeCustomFields(json const& jsonFields);
10+
}

0 commit comments

Comments
 (0)