================ @@ -0,0 +1,134 @@ +//===------------------------- SocketMsgSupport.h -------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_TOOLING_MODULEBUILDDAEMON_SOCKETMSGSUPPORT_H +#define LLVM_CLANG_TOOLING_MODULEBUILDDAEMON_SOCKETMSGSUPPORT_H + +#include "clang/Tooling/ModuleBuildDaemon/Client.h" +#include "clang/Tooling/ModuleBuildDaemon/SocketSupport.h" + +using namespace clang; +using namespace llvm; + +namespace cc1modbuildd { + +enum class ActionType { HANDSHAKE }; +enum class StatusType { REQUEST, SUCCESS, FAILURE }; + +struct BaseMsg { + ActionType MsgAction; + StatusType MsgStatus; + + BaseMsg() = default; + BaseMsg(ActionType Action, StatusType Status) + : MsgAction(Action), MsgStatus(Status) {} +}; + +struct HandshakeMsg : public BaseMsg { + HandshakeMsg() = default; + HandshakeMsg(ActionType Action, StatusType Status) + : BaseMsg(Action, Status) {} +}; + +template <typename T> std::string getBufferFromSocketMsg(T Msg) { + static_assert(std::is_base_of<cc1modbuildd::BaseMsg, T>::value, + "T must inherit from cc1modbuildd::BaseMsg"); + + std::string Buffer; + llvm::raw_string_ostream OS(Buffer); + llvm::yaml::Output YamlOut(OS); + + YamlOut << Msg; + return Buffer; +} + +template <typename T> Expected<T> getSocketMsgFromBuffer(StringRef Buffer) { + static_assert(std::is_base_of<cc1modbuildd::BaseMsg, T>::value, + "T must inherit from cc1modbuildd::BaseMsg"); + + T ClientRequest; + llvm::yaml::Input YamlIn(Buffer); + YamlIn >> ClientRequest; + + if (YamlIn.error()) { + std::string Msg = "Syntax or semantic error during YAML parsing"; ---------------- cpsughrue wrote:
`YamlIn.error()` dumps an error message describing the syntax or semantic error if there is one. I added a comment explaining that https://github.com/llvm/llvm-project/pull/67562 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits