#pragma once #include #include #include #include #include #include #include namespace vcpkg::Parse { struct ParseControlErrorInfo { std::string name; std::vector missing_fields; std::vector extra_fields; std::string error; }; template using ParseExpected = vcpkg::ExpectedT, std::unique_ptr>; using Paragraph = std::unordered_map>; struct ParagraphParser { ParagraphParser(Paragraph&& fields) : fields(std::move(fields)) {} void required_field(const std::string& fieldname, std::string& out); std::string optional_field(const std::string& fieldname); void required_field(const std::string& fieldname, std::pair out); void optional_field(const std::string& fieldname, std::pair out); std::unique_ptr error_info(const std::string& name) const; private: Paragraph&& fields; std::vector missing_fields; }; ExpectedS> parse_default_features_list(const std::string& str, StringView origin = "", TextRowCol textrowcol = {}); ExpectedS> parse_qualified_specifier_list(const std::string& str, StringView origin = "", TextRowCol textrowcol = {}); ExpectedS> parse_dependencies_list(const std::string& str, StringView origin = "", TextRowCol textrowcol = {}); }