#pragma once #include "./facade.hpp" namespace lsp::transform { template inline protocol::LSPAny LSPAny(const T& obj) { return LSPAnyConverter::ToLSPAny(obj); } template inline protocol::LSPAny LSPAny(const std::vector& vec) { return LSPAnyConverter::ToLSPAny(vec); } template inline protocol::LSPAny LSPAny(const std::map& map) { return LSPAnyConverter::ToLSPAny(map); } template inline protocol::LSPAny LSPAny(const std::optional& opt) { return LSPAnyConverter::ToLSPAny(opt); } template inline T As(const protocol::LSPAny& any) { return LSPAnyConverter::FromLSPAny(any); } template inline std::optional As(const std::optional& opt) { return LSPAnyConverter::As(opt); } template inline T As(const std::variant& var) { return LSPAnyConverter::As(var); } template inline T As(const protocol::LSPObject& obj) { return LSPAnyConverter::As(obj); } template inline T As(const protocol::LSPArray& arr) { return LSPAnyConverter::As(arr); } template inline T Number(const protocol::LSPAny& any) { return LSPAnyConverter::ToNumber(any); } template inline std::vector Vector(const protocol::LSPAny& any) { return LSPAnyConverter::ToVector(any); } template inline std::optional Optional(const protocol::LSPAny& any) { return LSPAnyConverter::ToOptional(any); } template inline protocol::LSPObject LSPObject(const T& obj) { // 如果已经是 LSPAny,直接获取其中的 LSPObject if constexpr (std::is_same_v) { return LSPAnyConverter::ToLSPObject(obj); } else { // 否则先转换为 LSPAny,再获取 LSPObject protocol::LSPAny any = LSPAnyConverter::ToLSPAny(obj); return LSPAnyConverter::ToLSPObject(any); } } template inline protocol::LSPArray LSPArray(const T& container) { // 如果已经是 LSPAny,直接获取其中的 LSPArray if constexpr (std::is_same_v) { return LSPAnyConverter::ToLSPArray(container); } else { // 否则转换为 LSPAny protocol::LSPAny any = LSPAnyConverter::ToLSPAny(container); return LSPAnyConverter::ToLSPArray(any); } } inline protocol::string String(const protocol::LSPAny& any) { return LSPAnyConverter::ToString(any); } inline protocol::boolean Bool(const protocol::LSPAny& any) { return LSPAnyConverter::ToBool(any); } }