#pragma once #include "LibLsp/JsonRpc/serializer.h" #include #include "lsDocumentUri.h" #include "LibLsp/lsp/lsAny.h" #include "LibLsp/lsp/lsTextEdit.h" struct ResourceOperation { std::string kind; virtual ~ResourceOperation() = default; MAKE_SWAP_METHOD(ResourceOperation, kind); }; MAKE_REFLECT_STRUCT(ResourceOperation, kind); extern void Reflect(Writer& visitor, ResourceOperation* value); struct CreateFileOptions{ /** * Overwrite existing file. Overwrite wins over `ignoreIfExists` */ optional overwrite = false; /** * Ignore if exists. */ optional< bool> ignoreIfExists =false; MAKE_SWAP_METHOD(CreateFileOptions, overwrite, ignoreIfExists) }; MAKE_REFLECT_STRUCT(CreateFileOptions, overwrite, ignoreIfExists) struct lsCreateFile :public ResourceOperation { /** * The resource to create. */ lsCreateFile(); lsDocumentUri uri; /** * Additional options */ optional options; /** * An optional annotation identifer describing the operation. * * @since 3.16.0 */ optional annotationId; MAKE_SWAP_METHOD(lsCreateFile, kind, uri, options, annotationId) }; MAKE_REFLECT_STRUCT(lsCreateFile, kind, uri,options, annotationId) struct DeleteFileOptions { /** * Delete the content recursively if a folder is denoted. */ optional recursive = false; /** * Ignore the operation if the file doesn't exist. */ optional ignoreIfNotExists = false; MAKE_SWAP_METHOD(DeleteFileOptions, recursive, ignoreIfNotExists); }; MAKE_REFLECT_STRUCT(DeleteFileOptions, recursive, ignoreIfNotExists) struct lsDeleteFile :public ResourceOperation { /** * The file to delete. */ lsDeleteFile(); lsDocumentUri uri; /** * Delete options. */ optional options; MAKE_SWAP_METHOD(lsDeleteFile, kind, uri, options); }; MAKE_REFLECT_STRUCT(lsDeleteFile, kind, uri,options); typedef CreateFileOptions RenameFileOptions; struct lsRenameFile :public ResourceOperation { /** * The old (existing) location. */ lsRenameFile(); lsDocumentUri oldUri; /** * The new location. */ lsDocumentUri newUri; /** * Rename options. */ optional options; /** * An optional annotation identifer describing the operation. * * @since 3.16.0 */ optional annotationId; MAKE_SWAP_METHOD(lsRenameFile, kind, oldUri, newUri, options, annotationId) }; MAKE_REFLECT_STRUCT(lsRenameFile, kind, oldUri, newUri, options, annotationId); extern ResourceOperation* GetResourceOperation(lsp::Any& lspAny);