| #ifndef RECORDER_ARGUMENTS_HPP | 
 | #define RECORDER_ARGUMENTS_HPP | 
 |  | 
 | #include <iostream> | 
 | #include <string> | 
 | #include <unordered_map> | 
 |  | 
 | #include "args.hxx" | 
 |  | 
 | class FontArguments | 
 | { | 
 |  | 
 | public: | 
 | 	FontArguments(int argc, const char** argv) | 
 |         : m_Parser( | 
 | 		    "Convert a font file into the rive format.", | 
 | 		    "Experimental....") | 
 |     { | 
 | 		args::HelpFlag help( | 
 | 		    m_Parser, "help", "Display this help menu", {'h', "help"}); | 
 | 		args::Group required(m_Parser, "required arguments:", args::Group::Validators::All); | 
 | 		args::Group optional(m_Parser, | 
 | 		                     "optional arguments:", | 
 | 		                     args::Group::Validators::DontCare); | 
 |  | 
 | 		args::ValueFlag<std::string> source( | 
 | 		    required, "path", "source filename", {'s', "source"}); | 
 |         args::ValueFlag<std::string> destination( | 
 |             required, "path", "destination filename", {'d', "destination"}); | 
 |         args::ValueFlag<std::string> charset( | 
 |             optional, "path", "charset filename", {'c', "charset"}); | 
 |  | 
 | 		args::CompletionFlag completion(m_Parser, {"complete"}); | 
 | 		try | 
 | 		{ | 
 | 			m_Parser.ParseCLI(argc, argv); | 
 | 		} | 
 | 		catch (const std::invalid_argument e) | 
 | 		{ | 
 | 			std::cout << e.what(); | 
 | 			throw; | 
 | 		} | 
 | 		catch (const args::Completion& e) | 
 | 		{ | 
 | 			std::cout << e.what(); | 
 | 			throw; | 
 | 		} | 
 | 		catch (const args::Help&) | 
 | 		{ | 
 | 			std::cout << m_Parser; | 
 | 			throw; | 
 | 		} | 
 | 		catch (const args::ParseError& e) | 
 | 		{ | 
 | 			std::cerr << e.what() << std::endl; | 
 | 			std::cerr << m_Parser; | 
 | 			throw; | 
 | 		} | 
 | 		catch (args::ValidationError e) | 
 | 		{ | 
 | 			std::cerr << e.what() << std::endl; | 
 | 			std::cerr << m_Parser; | 
 | 			throw; | 
 | 		} | 
 |  | 
 | 		m_Destination = args::get(destination); | 
 |         m_Source = args::get(source); | 
 |         m_Charset = args::get(charset); | 
 |     } | 
 |  | 
 | 	const std::string& destination() const { return m_Destination; } | 
 |     const std::string& source() const { return m_Source; } | 
 |     const std::string& charset() const { return m_Charset; } | 
 |  | 
 | private: | 
 | 	args::ArgumentParser m_Parser; | 
 | 	std::string m_Destination; | 
 | 	std::string m_Source; | 
 |     std::string m_Charset; | 
 | }; | 
 | #endif |