Decentralised Art Server
High-performance C++ backend that exposes HTML interface and a secure REST API for managing Performative Transactions entities
 
Loading...
Searching...
No Matches
cmd.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <string>
4#include <format>
5#include <vector>
6
7#include <absl/container/flat_hash_map.h>
8#include <spdlog/spdlog.h>
9
10namespace dcn::cmd
11{
13 {
14 enum class NArgs
15 {
16 Zero,
17 One,
18 Many
19 };
20
21 enum class Type
22 {
23 Unknown = 0,
24 Int,
25 String,
26 Bool,
27 Float,
28 Path
29 };
30
31 const std::string name;
32 const std::string desc;
33
36 };
37
39 {
40
41 public:
42 std::string constructHelpMessage() const;
43
44 void addArg(std::string name, CommandLineArgDef::NArgs nargs, CommandLineArgDef::Type type, std::string desc);
45
46 void parse(int argc, char** argv);
47
48 template<class T>
49 std::optional<T> getArg(std::string_view name)
50 {
51 const auto it = _parse_result.find(name);
52 if(it == _parse_result.end())
53 {
54 return std::nullopt;
55 }
56
57 if(std::holds_alternative<T>(it->second) == false)
58 {
59 spdlog::error("Type mismatch for argument \"{}\"", name);
60 return std::nullopt;
61 }
62
63 return std::get<T>(it->second);
64 }
65
66
67 private:
68 std::vector<CommandLineArgDef> _args;
69
70 absl::flat_hash_map<std::string, std::variant<
71 std::vector<int>,
72 std::vector<std::string>,
73 bool,
74 std::vector<float>,
75 std::vector<std::filesystem::path>>> _parse_result;
76 };
77}
Definition cmd.hpp:39
void parse(int argc, char **argv)
Definition cmd.cpp:36
std::string constructHelpMessage() const
Definition cmd.cpp:174
void addArg(std::string name, CommandLineArgDef::NArgs nargs, CommandLineArgDef::Type type, std::string desc)
Definition cmd.cpp:5
std::optional< T > getArg(std::string_view name)
Definition cmd.hpp:49
Definition cmd.hpp:11
Definition cmd.hpp:13
NArgs nargs
Definition cmd.hpp:34
Type type
Definition cmd.hpp:35
Type
Definition cmd.hpp:22
const std::string desc
Definition cmd.hpp:32
const std::string name
Definition cmd.hpp:31
NArgs
Definition cmd.hpp:15