2025-03-08 20:55:07 +01:00

75 lines
1.3 KiB
C++

#ifndef seafire__routing__route_hxx_
#define seafire__routing__route_hxx_
#include <seafire/routing/endpoint.hxx>
#include <seafire/server/middleware.hxx>
#include <seafire/server/request-handler.hxx>
#include <iostream>
#include <list>
#include <optional>
#include <vector>
namespace seafire::routing
{
class route_t
{
public:
route_t();
explicit
route_t(std::string);
route_t(std::string, server::request_handler_t);
std::string const&
path() const;
std::vector<server::middleware_t> const&
middleware() const;
std::optional<server::request_handler_t> const&
handler() const;
std::list<route_t> const&
children() const;
void
use(server::middleware_t);
route_t&
add_route();
route_t&
add_route(route_t);
route_t&
add_route(std::string);
route_t&
add_route(std::string, server::request_handler_t);
private:
std::string path_;
std::vector<server::middleware_t> middleware_;
std::optional<server::request_handler_t> handler_;
// must be std::list to prevent invalidation of references to
// individual routes.
//
std::list<route_t> 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