66 lines
1.8 KiB
C++
66 lines
1.8 KiB
C++
#ifndef LUNCH_REST_PARSER_H
|
|
#define LUNCH_REST_PARSER_H
|
|
|
|
#include "menu.hpp"
|
|
#include <sstream>
|
|
|
|
namespace LunchRest {
|
|
class Restaurant {
|
|
public:
|
|
Restaurant() = delete;
|
|
Restaurant(const std::string &url, const std::string &restaurant) :
|
|
_url(url), _restaurant(restaurant) {
|
|
menus.resize(5);
|
|
}
|
|
virtual ~Restaurant() = default;
|
|
const std::vector<Menu> &getMenus() {
|
|
return menus;
|
|
}
|
|
const std::string &getRestaurant() {
|
|
return _restaurant;
|
|
}
|
|
virtual void parse() = 0;
|
|
void clearMenus() {
|
|
menus.clear();
|
|
menus.resize(5);
|
|
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");
|
|
}
|
|
std::string jsonify(const std::vector<int> &days = {0,1,2,3,4}) {
|
|
std::stringstream ss{};
|
|
ss << "{\"restaurant\": \"" << getRestaurant() << "\", \"dailymenus\": [";
|
|
for(auto &day : days) {
|
|
ss << menus[day].jsonify() << ",";
|
|
}
|
|
if(!days.empty())
|
|
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<Menu> menus;
|
|
std::vector<Meal> permanent;
|
|
};
|
|
} // end of namespace LunchRest
|
|
|
|
#endif
|