#pragma once #include "Utils.hpp" #include "Reporter.hpp" #include #include #include #include #include namespace BMapInspector::Cli { enum class RequestKind { Help, Version, Work, }; class Request { public: static Request FromHelpRequest(); static Request FromVersionRequest(); static Request FromWorkRequest(Utils::ReportLevel level, const std::u8string_view& file_path, const std::u8string_view& encoding, const std::u8string_view& ballance_path); private: Request(RequestKind kind, std::optional level, std::optional file_path, std::optional encoding, std::optional ballance_path); public: ~Request(); YYCC_DEFAULT_COPY_MOVE(Request) public: RequestKind GetRequestKind() const; Utils::ReportLevel GetLevel() const; std::u8string_view GetFilePath() const; std::u8string_view GetEncoding() const; std::u8string_view GetBallancePath() const; private: RequestKind kind; ///< The kind of this request. std::optional level; ///< The filter level. std::optional file_path; ///< The path to loaded map file. std::optional encoding; ///< The encoding used when loading map file. std::optional ballance_path; ///< The path to Ballance root directory for loading resources. }; enum class Error { BadParse, ///< Error occurs when executing parser. NoFile, ///< User do not specify file path for loading. BadFile, ///< User specified file path is bad. NoBallance, ///< User do not specify Ballance directory for loading. BadBallance, ///< User specified Ballance directory is bad. BadEncoding, ///< User given encoding value is bad. BadLevel, ///< User given level name is bad. }; template using Result = std::expected; Result parse(); } // namespace BMapInspector::Cli