1 //===--- Conversion.cpp - LSP data (de-)serialization through XPC - C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "xpc/Conversion.h" 10 #include "support/Logger.h" 11 #include "llvm/ADT/StringRef.h" 12 #include "llvm/Support/ScopedPrinter.h" 13 #include <string> 14 #include <vector> 15 16 using namespace llvm; 17 namespace clang { 18 namespace clangd { 19 jsonToXpc(const json::Value & JSON)20xpc_object_t jsonToXpc(const json::Value &JSON) { 21 const char *const Key = "LSP"; 22 xpc_object_t PayloadObj = xpc_string_create(llvm::to_string(JSON).c_str()); 23 return xpc_dictionary_create(&Key, &PayloadObj, 1); 24 } 25 xpcToJson(const xpc_object_t & XPCObject)26json::Value xpcToJson(const xpc_object_t &XPCObject) { 27 if (xpc_get_type(XPCObject) == XPC_TYPE_DICTIONARY) { 28 const char *const LSP = xpc_dictionary_get_string(XPCObject, "LSP"); 29 auto Json = json::parse(llvm::StringRef(LSP)); 30 if (Json) 31 return *Json; 32 else 33 elog("JSON parse error: {0}", toString(Json.takeError())); 34 } 35 return json::Value(nullptr); 36 } 37 38 } // namespace clangd 39 } // namespace clang 40