#include "args.hpp" #include <getopt.h> #include <format> #include <stdexcept> namespace kcsbridge { Args::Args(int argc, char* argv[]) { static const char opts[] = ":c:"; static const struct option longopts[] = { {"channel", required_argument, nullptr, 'c'}, {nullptr, 0, nullptr, 0}, }; int c; optind = 0; while ((c = getopt_long(argc, argv, opts, longopts, nullptr)) > 0) { switch (c) { case 'c': channel = optarg; break; case ':': throw std::runtime_error( std::format("Missing argument for `{}`", argv[optind - 1])); break; default: throw std::runtime_error(std::format( "Invalid command line argument `{}`", argv[optind - 1])); } } if (optind != argc) { throw std::invalid_argument("Requires no additional arguments"); } if (channel == nullptr) { throw std::invalid_argument("Missing KCS channel"); } } } // namespace kcsbridge