Mercurial > irccd
diff irccdctl/cli.hpp @ 528:9daccaeedcce
Irccdctl: split cli.hpp, closes #726
author | David Demelier <markand@malikania.fr> |
---|---|
date | Thu, 16 Nov 2017 23:12:45 +0100 |
parents | a88796ed040a |
children | 986ed3a7575d |
line wrap: on
line diff
--- a/irccdctl/cli.hpp Thu Nov 16 22:45:12 2017 +0100 +++ b/irccdctl/cli.hpp Thu Nov 16 23:12:45 2017 +0100 @@ -19,6 +19,7 @@ #ifndef IRCCD_CLI_HPP #define IRCCD_CLI_HPP +#include <stdexcept> #include <string> #include <vector> @@ -30,16 +31,14 @@ class controller; -/* - * cli. - * ------------------------------------------------------------------ - */ - /** * \brief Abstract CLI class. */ class cli { public: + /** + * Convenient handler for request function. + */ using handler_t = std::function<void (nlohmann::json)>; private: @@ -66,498 +65,30 @@ void request(ctl::controller& ctl, nlohmann::json json, handler_t handler = nullptr); public: - cli() noexcept = default; - - virtual ~cli() noexcept = default; - - virtual std::string name() const = 0; - - virtual void exec(ctl::controller& ctl, const std::vector<std::string>& args) = 0; -}; - -/** - * \brief Implementation of irccdctl plugin-config. - */ -class plugin_config_cli : public cli { -private: - void set(ctl::controller&, const std::vector<std::string>&); - void get(ctl::controller&, const std::vector<std::string>&); - void getall(ctl::controller&, const std::vector<std::string>&); - -public: /** - * \copydoc cli::name - */ - std::string name() const override; - - /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl plugin-info. - */ -class plugin_info_cli : public cli { -public: - /** - * \copydoc cli::name - */ - std::string name() const override; - - /** - * \copydoc cli::exec + * Default constructor. */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl plugin-list. - */ -class plugin_list_cli : public cli { -public: - /** - * \copydoc cli::name - */ - std::string name() const override; - - /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl plugin-load. - */ -class plugin_load_cli : public cli { -public: - /** - * \copydoc cli::name - */ - std::string name() const override; - - /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl plugin-reload. - */ -class plugin_reload_cli : public cli { -public: - /** - * \copydoc cli::name - */ - std::string name() const override; - - /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl plugin-unload. - */ -class plugin_unload_cli : public cli { -public: - /** - * \copydoc cli::name - */ - std::string name() const override; + cli() noexcept = default; /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl server-cmode. - */ -class server_channel_mode_cli : public cli { -public: - /** - * \copydoc cli::name - */ - std::string name() const override; - - /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl server-cnotice. - */ -class server_channel_notice_cli : public cli { -public: - /** - * \copydoc cli::name - */ - std::string name() const override; - - /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl server-connect. - */ -class server_connect_cli : public cli { -public: - /** - * \copydoc cli::name - */ - std::string name() const override; - - /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl server-disconnect. - */ -class server_disconnect_cli : public cli { -public: - /** - * \copydoc cli::name + * Virtual destructor defaulted. */ - std::string name() const override; - - /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl server-info. - */ -class server_info_cli : public cli { -public: - /** - * \copydoc cli::name - */ - std::string name() const override; - - /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl server-invite. - */ -class server_invite_cli : public cli { -public: - /** - * \copydoc cli::name - */ - std::string name() const override; - - /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl server-join. - */ -class server_join_cli : public cli { -public: - /** - * \copydoc cli::name - */ - std::string name() const override; - - /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl server-kick. - */ -class server_kick_cli : public cli { -public: - /** - * \copydoc cli::name - */ - std::string name() const override; + virtual ~cli() noexcept = default; /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl server-list. - */ -class server_list_cli : public cli { -public: - /** - * \copydoc cli::name - */ - std::string name() const override; - - /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl server-me. - */ -class server_me_cli : public cli { -public: - /** - * \copydoc cli::name - */ - std::string name() const override; - - /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl server-message. - */ -class server_message_cli : public cli { -public: - /** - * \copydoc cli::name - */ - std::string name() const override; - - /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl server-mode. - */ -class server_mode_cli : public cli { -public: - /** - * \copydoc cli::name + * Return the command name. + * + * \return the name */ - std::string name() const override; - - /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl server-nick. - */ -class server_nick_cli : public cli { -public: - /** - * \copydoc cli::name - */ - std::string name() const override; - - /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl server-notice. - */ -class server_notice_cli : public cli { -public: - /** - * \copydoc cli::name - */ - std::string name() const override; - - /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl server-part. - */ -class server_part_cli : public cli { -public: - /** - * \copydoc cli::name - */ - std::string name() const override; - - /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl server-reconnect. - */ -class server_reconnect_cli : public cli { -public: - /** - * \copydoc cli::name - */ - std::string name() const override; + virtual std::string name() const = 0; /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl server-topic. - */ -class server_topic_cli : public cli { -public: - /** - * \copydoc cli::name - */ - std::string name() const override; - - /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl rule-add. - */ -class rule_add_cli : public cli { -public: - /** - * \copydoc cli::name - */ - std::string name() const override; - - /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl rule-edit. - */ -class rule_edit_cli : public cli { -public: - /** - * \copydoc cli::name - */ - std::string name() const override; - - /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl rule-list. - */ -class rule_list_cli : public cli { -public: - /** - * \copydoc cli::name - */ - std::string name() const override; - - /** - * \copydoc cli::exec + * Execute the command. + * + * \param ctl the controller + * \param args the user arguments */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl rule-info. - */ -class rule_info_cli : public cli { -public: - /** - * \copydoc cli::name - */ - std::string name() const override; - - /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl rule-remove. - */ -class rule_remove_cli : public cli { -public: - /** - * \copydoc cli::name - */ - std::string name() const override; - - /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl rule-move. - */ -class rule_move_cli : public cli { -public: - /** - * \copydoc cli::name - */ - std::string name() const override; - - /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; -}; - -/** - * \brief Implementation of irccdctl watch. - */ -class watch_cli : public cli { -public: - /** - * \copydoc cli::name - */ - std::string name() const override; - - /** - * \copydoc cli::exec - */ - void exec(ctl::controller& irccdctl, const std::vector<std::string>& args) override; + virtual void exec(ctl::controller& ctl, const std::vector<std::string>& args) = 0; }; } // !ctl