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