// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "../zen.h" #include namespace zen { class WorkspaceCommand; class WorkspaceShareCommand; ////////////////////////////////////////////////////////////////////////// // WorkspaceCommand subcommands class WorkspaceCreateSubCmd : public ZenSubCmdBase { public: explicit WorkspaceCreateSubCmd(WorkspaceCommand& Parent); void Run(const ZenCliOptions& GlobalOptions) override; private: WorkspaceCommand& m_Parent; }; class WorkspaceInfoSubCmd : public ZenSubCmdBase { public: explicit WorkspaceInfoSubCmd(WorkspaceCommand& Parent); void Run(const ZenCliOptions& GlobalOptions) override; private: WorkspaceCommand& m_Parent; }; class WorkspaceRemoveSubCmd : public ZenSubCmdBase { public: explicit WorkspaceRemoveSubCmd(WorkspaceCommand& Parent); void Run(const ZenCliOptions& GlobalOptions) override; private: WorkspaceCommand& m_Parent; }; class WorkspaceCommand : public CacheStoreCmdWithSubCommands { public: static constexpr char Name[] = "workspace"; static constexpr char Description[] = "Manage workspaces - create, remove, info"; WorkspaceCommand(); ~WorkspaceCommand(); cxxopts::Options& Options() override { return m_Options; } protected: bool OnParentOptionsParsed(const ZenCliOptions& GlobalOptions) override; private: friend class WorkspaceCreateSubCmd; friend class WorkspaceInfoSubCmd; friend class WorkspaceRemoveSubCmd; cxxopts::Options m_Options{Name, Description}; std::string m_SubCommand; std::string m_HostName; std::filesystem::path m_SystemRootDir; std::filesystem::path m_StatePath; // Shared subcommand state std::string m_Id; std::string m_Path; bool m_AllowShareCreationFromHttp = false; // Subcommand instances WorkspaceCreateSubCmd m_CreateSubCmd{*this}; WorkspaceInfoSubCmd m_InfoSubCmd{*this}; WorkspaceRemoveSubCmd m_RemoveSubCmd{*this}; }; ////////////////////////////////////////////////////////////////////////// // WorkspaceShareCommand subcommands class WsShareCreateSubCmd : public ZenSubCmdBase { public: explicit WsShareCreateSubCmd(WorkspaceShareCommand& Parent); void Run(const ZenCliOptions& GlobalOptions) override; private: WorkspaceShareCommand& m_Parent; }; class WsShareInfoSubCmd : public ZenSubCmdBase { public: explicit WsShareInfoSubCmd(WorkspaceShareCommand& Parent); void Run(const ZenCliOptions& GlobalOptions) override; private: WorkspaceShareCommand& m_Parent; }; class WsShareRemoveSubCmd : public ZenSubCmdBase { public: explicit WsShareRemoveSubCmd(WorkspaceShareCommand& Parent); void Run(const ZenCliOptions& GlobalOptions) override; private: WorkspaceShareCommand& m_Parent; }; class WsShareFilesSubCmd : public ZenSubCmdBase { public: explicit WsShareFilesSubCmd(WorkspaceShareCommand& Parent); void Run(const ZenCliOptions& GlobalOptions) override; private: WorkspaceShareCommand& m_Parent; }; class WsShareEntriesSubCmd : public ZenSubCmdBase { public: explicit WsShareEntriesSubCmd(WorkspaceShareCommand& Parent); void Run(const ZenCliOptions& GlobalOptions) override; private: WorkspaceShareCommand& m_Parent; }; class WsShareGetSubCmd : public ZenSubCmdBase { public: explicit WsShareGetSubCmd(WorkspaceShareCommand& Parent); void Run(const ZenCliOptions& GlobalOptions) override; private: WorkspaceShareCommand& m_Parent; }; class WsShareBatchSubCmd : public ZenSubCmdBase { public: explicit WsShareBatchSubCmd(WorkspaceShareCommand& Parent); void Run(const ZenCliOptions& GlobalOptions) override; private: WorkspaceShareCommand& m_Parent; }; class WorkspaceShareCommand : public CacheStoreCmdWithSubCommands { public: static constexpr char Name[] = "workspace-share"; static constexpr char Description[] = "Manage workspace shared folders in a workspace - create, remove, info, files, entries, get, batch"; WorkspaceShareCommand(); ~WorkspaceShareCommand(); cxxopts::Options& Options() override { return m_Options; } /// Build a URL segment identifying the share (by alias or workspace/share id pair). std::string GetShareIdentityUrl() const; protected: bool OnParentOptionsParsed(const ZenCliOptions& GlobalOptions) override; private: friend class WsShareCreateSubCmd; friend class WsShareInfoSubCmd; friend class WsShareRemoveSubCmd; friend class WsShareFilesSubCmd; friend class WsShareEntriesSubCmd; friend class WsShareGetSubCmd; friend class WsShareBatchSubCmd; cxxopts::Options m_Options{Name, Description}; std::string m_SubCommand; std::string m_HostName; std::filesystem::path m_SystemRootDir; std::filesystem::path m_StatePath; // Shared subcommand state std::string m_WorkspaceId; std::filesystem::path m_WorkspaceRoot; std::string m_ShareId; std::string m_Alias; std::string m_FieldFilter; bool m_Refresh = false; // Get-specific std::string m_ChunkId; uint64_t m_Offset = 0; uint64_t m_Size = ~uint64_t(0); // Batch-specific std::vector m_ChunkIds; // Create-specific std::filesystem::path m_SharePath; // Subcommand instances WsShareCreateSubCmd m_CreateSubCmd{*this}; WsShareInfoSubCmd m_InfoSubCmd{*this}; WsShareRemoveSubCmd m_RemoveSubCmd{*this}; WsShareFilesSubCmd m_FilesSubCmd{*this}; WsShareEntriesSubCmd m_EntriesSubCmd{*this}; WsShareGetSubCmd m_GetSubCmd{*this}; WsShareBatchSubCmd m_BatchSubCmd{*this}; }; } // namespace zen