Change RequestId::value from int to std::string to allow non-numeric IDs.

This commit is contained in:
Riatre Foo 2019-07-16 14:39:35 +08:00 committed by Fangrui Song
parent 990925d806
commit eb752497e8
3 changed files with 10 additions and 11 deletions

View File

@ -26,16 +26,16 @@ namespace ccls {
void Reflect(JsonReader &vis, RequestId &v) {
if (vis.m->IsInt64()) {
v.type = RequestId::kInt;
v.value = int(vis.m->GetInt64());
v.value = std::to_string(int(vis.m->GetInt64()));
} else if (vis.m->IsInt()) {
v.type = RequestId::kInt;
v.value = vis.m->GetInt();
v.value = std::to_string(vis.m->GetInt());
} else if (vis.m->IsString()) {
v.type = RequestId::kString;
v.value = atoll(vis.m->GetString());
v.value = vis.m->GetString();
} else {
v.type = RequestId::kNone;
v.value = -1;
v.value.clear();
}
}
@ -45,11 +45,10 @@ void Reflect(JsonWriter &visitor, RequestId &value) {
visitor.Null();
break;
case RequestId::kInt:
visitor.Int(value.value);
visitor.Int(atoll(value.value.c_str()));
break;
case RequestId::kString:
auto s = std::to_string(value.value);
visitor.String(s.c_str(), s.size());
visitor.String(value.value.c_str(), value.value.size());
break;
}
}

View File

@ -23,6 +23,7 @@ limitations under the License.
#include <chrono>
#include <iosfwd>
#include <string>
namespace ccls {
struct RequestId {
@ -31,7 +32,7 @@ struct RequestId {
enum Type { kNone, kInt, kString };
Type type = kNone;
int value = -1;
std::string value;
bool Valid() const { return type != kNone; }
};

View File

@ -810,11 +810,10 @@ static void Reply(RequestId id, const char *key,
w.Null();
break;
case RequestId::kInt:
w.Int(id.value);
w.Int(atoll(id.value.c_str()));
break;
case RequestId::kString:
auto s = std::to_string(id.value);
w.String(s.c_str(), s.length());
w.String(id.value.c_str(), id.value.size());
break;
}
w.Key(key);