#ifndef seafire__routing__route_hxx_ #define seafire__routing__route_hxx_ #include #include #include #include #include #include #include namespace seafire::routing { class route_t { public: route_t(); explicit route_t(std::string); route_t(std::string, server::request_handler_t); route_t(route_t const&) = delete; route_t(route_t&&) = delete; std::string const& path() const; std::vector const& middleware() const; std::optional const& handler() const; std::list const& children() const; void use(server::middleware_t); route_t& add_route(); route_t& add_route(std::string); route_t& add_route(std::string, server::request_handler_t); route_t& operator=(route_t const&) = delete; route_t& operator=(route_t&&) = delete; private: std::string path_; std::vector middleware_; std::optional handler_; // must be std::list to prevent invalidation of references to // individual routes. // std::list children_; }; std::ostream& to_stream(std::ostream&, route_t const&, std::size_t); std::ostream& operator<<(std::ostream&, route_t const&); } // namespace seafire::routing #endif