#pragma once #include "generator/emitter_booking.hpp" #include "generator/emitter_coastline.hpp" #include "generator/emitter_country.hpp" #include "generator/emitter_interface.hpp" #include "generator/emitter_noop.hpp" #include "generator/emitter_restaurants.hpp" #include "generator/emitter_simple.hpp" #include "generator/emitter_world.hpp" #include "generator/factory_utils.hpp" #include "base/assert.hpp" #include #include namespace generator { enum class EmitterType { Restaurants, Simple, SimpleWithPreserialize, Country, Coastline, World, Noop // Booking }; template std::shared_ptr CreateEmitter(EmitterType type, Args&&... args) { switch (type) { case EmitterType::Coastline: return create(std::forward(args)...); case EmitterType::Country: return create(std::forward(args)...); case EmitterType::Simple: return create(std::forward(args)...); case EmitterType::SimpleWithPreserialize: return create(std::forward(args)...); case EmitterType::Restaurants: return create(std::forward(args)...); case EmitterType::World: return create(std::forward(args)...); case EmitterType::Noop: return create(std::forward(args)...); } UNREACHABLE(); } } // namespace generator