mirror of
https://github.com/MaskRay/ccls.git
synced 2024-11-22 07:35:08 +00:00
Add submodule https://github.com/msgpack/msgpack-c and make Serialize/Deserialize aware of SerializeFormat
This commit is contained in:
parent
734f9b6380
commit
3f1cb5c072
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -10,3 +10,6 @@
|
||||
[submodule "third_party/loguru"]
|
||||
path = third_party/loguru
|
||||
url = https://github.com/emilk/loguru
|
||||
[submodule "third_party/msgpack-c"]
|
||||
path = third_party/msgpack-c
|
||||
url = https://github.com/msgpack/msgpack-c
|
||||
|
@ -27,17 +27,27 @@ std::string GetCachedBaseFileName(Config* config,
|
||||
return config->cacheDirectory + cache_file;
|
||||
}
|
||||
|
||||
std::string GetCacheFileName(Config* config, const std::string& base) {
|
||||
switch (config->cacheFormat) {
|
||||
case SerializeFormat::Json:
|
||||
return base + "json";
|
||||
case SerializeFormat::MessagePack:
|
||||
return base + "mpack";
|
||||
}
|
||||
}
|
||||
|
||||
std::unique_ptr<IndexFile> LoadCachedIndex(Config* config,
|
||||
const std::string& filename) {
|
||||
if (!config->enableCacheRead)
|
||||
return nullptr;
|
||||
|
||||
optional<std::string> file_content =
|
||||
ReadContent(GetCachedBaseFileName(config, filename) + ".json");
|
||||
optional<std::string> file_content = ReadContent(
|
||||
GetCacheFileName(config, GetCachedBaseFileName(config, filename)));
|
||||
if (!file_content)
|
||||
return nullptr;
|
||||
|
||||
return Deserialize(filename, *file_content, IndexFile::kCurrentVersion);
|
||||
return Deserialize(config->cacheFormat, filename, *file_content,
|
||||
IndexFile::kCurrentVersion);
|
||||
}
|
||||
|
||||
// Manages loading caches from file paths for the indexer process.
|
||||
@ -132,5 +142,5 @@ void WriteToCache(Config* config, IndexFile& file) {
|
||||
}
|
||||
|
||||
std::string indexed_content = Serialize(file);
|
||||
WriteToFile(cache_basename + ".json", indexed_content);
|
||||
WriteToFile(GetCacheFileName(config, cache_basename), indexed_content);
|
||||
}
|
||||
|
@ -11,6 +11,8 @@ struct Config {
|
||||
std::string compilationDatabaseDirectory;
|
||||
// Cache directory for indexed files.
|
||||
std::string cacheDirectory;
|
||||
// Cache serialization format
|
||||
SerializeFormat cacheFormat = SerializeFormat::Json;
|
||||
// Value to use for clang -resource-dir if not present in
|
||||
// compile_commands.json.
|
||||
std::string resourceDirectory;
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
// TODO Move Json* to serializers/json.cc
|
||||
#include "serializers/json.h"
|
||||
//#include "serializers/msgpack.h"
|
||||
|
||||
#include "indexer.h"
|
||||
|
||||
@ -208,7 +209,8 @@ std::string Serialize(IndexFile& file) {
|
||||
return output.GetString();
|
||||
}
|
||||
|
||||
std::unique_ptr<IndexFile> Deserialize(std::string path,
|
||||
std::unique_ptr<IndexFile> Deserialize(SerializeFormat format,
|
||||
std::string path,
|
||||
std::string serialized,
|
||||
optional<int> expected_version) {
|
||||
rapidjson::Document reader;
|
||||
@ -226,6 +228,8 @@ std::unique_ptr<IndexFile> Deserialize(std::string path,
|
||||
}
|
||||
}
|
||||
|
||||
// TODO msgpack
|
||||
(void)format;
|
||||
auto file = MakeUnique<IndexFile>(path);
|
||||
JsonReader json_reader{&reader};
|
||||
Reflect(json_reader, *file);
|
||||
|
@ -8,6 +8,8 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
enum class SerializeFormat { Json, MessagePack };
|
||||
|
||||
class Reader {
|
||||
public:
|
||||
virtual ~Reader() {}
|
||||
@ -236,7 +238,8 @@ void ReflectMember(Reader& visitor, const char* name, T& value) {
|
||||
}
|
||||
|
||||
std::string Serialize(IndexFile& file);
|
||||
std::unique_ptr<IndexFile> Deserialize(std::string path,
|
||||
std::unique_ptr<IndexFile> Deserialize(SerializeFormat format,
|
||||
std::string path,
|
||||
std::string serialized,
|
||||
optional<int> expected_version);
|
||||
|
||||
|
@ -76,7 +76,8 @@ void DiffDocuments(std::string path,
|
||||
void VerifySerializeToFrom(IndexFile* file) {
|
||||
std::string expected = file->ToString();
|
||||
std::unique_ptr<IndexFile> result =
|
||||
Deserialize("--.cc", Serialize(*file), nullopt /*expected_version*/);
|
||||
Deserialize(SerializeFormat::Json, "--.cc", Serialize(*file),
|
||||
nullopt /*expected_version*/);
|
||||
std::string actual = result->ToString();
|
||||
if (expected != actual) {
|
||||
std::cerr << "Serialization failure" << std::endl;
|
||||
|
1
third_party/msgpack-c
vendored
Submodule
1
third_party/msgpack-c
vendored
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 208595b2620cf6260ce3d6d4cf8543f13b206449
|
Loading…
Reference in New Issue
Block a user