#ifndef LUNCH_REST_PARSER_H #define LUNCH_REST_PARSER_H #include "menu.hpp" #include namespace LunchRest { class Restaurant { public: Restaurant() = delete; Restaurant(const std::string &url, const std::string &restaurant) : _url(url), _restaurant(restaurant) { menus.resize(7); } virtual ~Restaurant() = default; const std::vector &getMenus() { return menus; } const std::string &getRestaurant() { return _restaurant; } virtual void parse() = 0; void clearMenus() { menus.clear(); permanent.clear(); menus.resize(7); for(auto &x : menus) x.setInvalidMenu(); menus[0].setDay("Monday"); menus[1].setDay("Tuesday"); menus[2].setDay("Wednesday"); menus[3].setDay("Thursday"); menus[4].setDay("Friday"); menus[5].setDay("Saturday"); menus[6].setDay("Sunday"); } std::string jsonify(const std::vector &days = {0,1,2,3,4,5,6}) { std::stringstream ss{}; ss << "{\"restaurant\": \"" << getRestaurant() << "\", \"dailymenus\": ["; bool comma = false; for(auto &day : days) { if(static_cast(day) > menus.size()) continue; comma = true; ss << menus[day].jsonify() << ","; } if(comma) ss.seekp(-1, ss.cur); ss << "], \"permanentmeals\": ["; for(auto &meal : permanent) { ss << meal.jsonify() << ","; } if(permanent.size() > 0) ss.seekp(-1, ss.cur); ss << "]}"; return ss.str(); } void addPermanent(const Meal &meal) { permanent.push_back(meal); } void addPermanent(bool isSoup, const std::string &name, const std::string &desc, int price) { permanent.emplace_back(isSoup, name, desc, price); } protected: std::string _url; std::string _restaurant; std::vector menus; std::vector permanent; }; } // end of namespace LunchRest #endif