#ifndef ARGUMENT_H #define ARGUMENT_H #include #include #include namespace phosphor { namespace led { /** @brief Class - Encapsulates parsing command line options and * populating arguments */ class ArgumentParser { public: ArgumentParser() = delete; ~ArgumentParser() = default; ArgumentParser(const ArgumentParser&) = delete; ArgumentParser& operator=(const ArgumentParser&) = delete; ArgumentParser(ArgumentParser&&) = default; ArgumentParser& operator=(ArgumentParser&&) = default; /** @brief Constructs Argument object * * @param argc - the main function's argc passed as is * @param argv - the main function's argv passed as is * @return Object constructed */ ArgumentParser(int argc, char** argv); /** @brief Given a option, returns its argument(optarg) */ const std::string& operator[](const std::string& opt); /** @brief Displays usage */ static void usage(char** argv); private: /** @brief Option to argument mapping */ std::map arguments; /** @brief Array of struct options as needed by getopt_long */ // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays) static inline const option options[] = { {"path", required_argument, nullptr, 'p'}, {"help", no_argument, nullptr, 'h'}, {nullptr, 0, nullptr, 0}, }; /** @brief optstring as needed by getopt_long */ static inline const char* const optionstr = "p:?h"; }; } // namespace led } // namespace phosphor #endif