aboutsummaryrefslogtreecommitdiff
path: root/apps/apps.h
diff options
context:
space:
mode:
Diffstat (limited to 'apps/apps.h')
-rw-r--r--apps/apps.h40
1 files changed, 31 insertions, 9 deletions
diff --git a/apps/apps.h b/apps/apps.h
index 8173c51..7569a9f 100644
--- a/apps/apps.h
+++ b/apps/apps.h
@@ -3,27 +3,53 @@
#include <boost/program_options.hpp>
#include <log4cplus/logger.h>
#include <log4cplus/loggingmacros.h>
+#include "json.hpp"
+#include <exception>
namespace trygvis {
namespace apps {
namespace po = boost::program_options;
+using namespace log4cplus;
+
+using json = nlohmann::json;
+
+class missing_key : public std::runtime_error {
+public:
+ missing_key(const json::string_t key) : runtime_error("Missing key: " + key), key(key) {
+ }
+
+ const json::string_t key;
+};
+
+template<typename T>
+T get(json j, std::string key) {
+ auto ref = j[key];
+
+ if (ref.is_null()) {
+ throw missing_key(key);
+ }
+
+ return ref;
+}
class app_execution {
public:
- app_execution(po::options_description desc, po::variables_map vm) : desc(desc), vm(vm) {
+ app_execution(po::options_description desc, po::variables_map vm, Logger logger) : desc(desc), vm(vm), logger(logger) {
}
- po::options_description desc;
- po::variables_map vm;
+ const po::options_description desc;
+ const po::variables_map vm;
+ const log4cplus::Logger logger;
void usage();
};
class app {
public:
- app(std::string app_name): _app_name(app_name), logger(log4cplus::Logger::getInstance(LOG4CPLUS_TEXT(app_name))) {
+ app(std::string app_name) : app_name(app_name) {
}
+
virtual ~app() = default;
virtual void add_options(po::options_description_easy_init &options) {
@@ -34,13 +60,9 @@ public:
virtual int main(app_execution &execution) = 0;
-protected:
- const std::string _app_name;
- const log4cplus::Logger logger;
+ const std::string app_name;
};
-int launch_app(int argc, char *argv[], app &app);
-
std::string get_hostname();
template<typename T>