aboutsummaryrefslogtreecommitdiff
path: root/source/10-common/Uid.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/10-common/Uid.cpp')
-rw-r--r--source/10-common/Uid.cpp28
1 files changed, 20 insertions, 8 deletions
diff --git a/source/10-common/Uid.cpp b/source/10-common/Uid.cpp
index 7f8fd9d..58dfffd 100644
--- a/source/10-common/Uid.cpp
+++ b/source/10-common/Uid.cpp
@@ -34,21 +34,33 @@ std::string Uid::WriteString() {
}
void Uid::Read(const rapidjson::Value& value) {
- assert(value.IsArray());
- assert(value.Size() == 2);
- auto& upper = value[0];
- assert(upper.IsUint64());
- auto& lower = value[1];
- assert(lower.IsUint64());
+ if (value.IsString()) {
+ ReadString(rapidjson::AsStringView(value));
+ } else if (value.IsArray()) {
+ // Compatibility support
+ assert(value.Size() == 2);
+ auto& upper = value[0];
+ assert(upper.IsUint64());
+ auto& lower = value[1];
+ assert(lower.IsUint64());
- this->upper = upper.GetUint64();
- this->lower = lower.GetUint64();
+ this->upper = upper.GetUint64();
+ this->lower = lower.GetUint64();
+ } else {
+ assert(false);
+ }
}
void Uid::WriteInto(rapidjson::Value& value, rapidjson::Document& root) const {
+#if BRUSSEL_Uid_WRITE_USE_ARRAY
value.Reserve(2, root.GetAllocator());
value.PushBack((uint64_t)upper, root.GetAllocator());
value.PushBack((uint64_t)lower, root.GetAllocator());
+#else
+ char buf[256];
+ int len = snprintf(buf, sizeof(buf), BRUSSEL_Uid_FORMAT_STR, upper, lower);
+ value.SetString(buf, len, root.GetAllocator());
+#endif
}
rapidjson::Value Uid::Write(rapidjson::Document& root) const {