#ifndef CONFIGPARSER_HPP # define CONFIGPARSER_HPP # include "ServerConfig.hpp" # include "LocationConfig.hpp" # include "utils.hpp" # include # include # include // exception, what # include // runtime_error, invalid_argument # include // string # include // strtol, stroul # include // cout, cin # include // ifstream # include // sort() in Post class ConfigParser { public: ConfigParser(); ~ConfigParser(); ConfigParser(const std::string &config_file); void read_config(const std::string &config_file); std::vector *parse() const; void print_content() const; private: std::string _content; ServerConfig _parse_server(size_t *start) const; LocationConfig _parse_location(size_t *start) const; void _set_server_values(ServerConfig *server, const std::string &key, std::string value) const; void _set_location_values(LocationConfig *location, const std::string &key, std::string value) const; /* Extra */ std::string _pre_set_val_check(const std::string &key, const std::string &value) const; std::string _get_first_word(size_t *curr) const; std::string _get_rest_of_line(size_t *curr) const; /* Post Processing */ void _post_processing(std::vector *servers) const; bool _find_root_path_location(std::vector locations) const; }; #endif