aboutsummaryrefslogtreecommitdiffstats
path: root/nihil.cli/command_map.ccm
diff options
context:
space:
mode:
Diffstat (limited to 'nihil.cli/command_map.ccm')
-rw-r--r--nihil.cli/command_map.ccm67
1 files changed, 0 insertions, 67 deletions
diff --git a/nihil.cli/command_map.ccm b/nihil.cli/command_map.ccm
deleted file mode 100644
index 8cf9d9c..0000000
--- a/nihil.cli/command_map.ccm
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * This source code is released into the public domain.
- */
-
-module;
-
-#include <functional>
-#include <iostream>
-#include <map>
-#include <string>
-#include <utility>
-
-export module nihil.cli:command_map;
-
-import nihil.util;
-import :usage_error;
-
-/*
- * command_map represents a hierarchical list of commands. At each level,
- * a command is mapped to a handler, which can either be a function, in
- * which case we execute the function, or another command_map, in which
- * case we invoke the new map
- */
-
-namespace nihil {
-
-export struct command;
-
-/*
- * Register a command; used by command<>::command().
- */
-auto register_command(std::string_view path, command *) noexcept -> void;
-
-/*
- * A command that can be invoked. Instantiating a command adds this command
- * to the global command table. If an error occurs, the program will abort.
- */
-export struct command {
- command(std::string_view path, std::string_view usage, auto &&fn)
- : m_path(path)
- , m_usage(usage)
- , m_handler(std::forward<decltype(fn)>(fn))
- {
- register_command(path, this);
- }
-
- [[nodiscard]] auto path(this command const &self) -> std::string_view
- {
- return self.m_path;
- }
-
- auto invoke(this command const &self, int argc, char **argv) -> int
- {
- return std::invoke(self.m_handler, argc, argv);
- }
-
-private:
- std::string_view m_path;
- std::string_view m_usage;
- std::function<int (int, char **)> m_handler;
-};
-
-// The public API.
-export [[nodiscard]] auto dispatch_command(int argc, char **argv) -> int;
-export auto print_usage(std::string_view prefix) -> void;
-
-} // namespace nihil