#ifndef seafire__routing__route_parameter_hxx_ #define seafire__routing__route_parameter_hxx_ #include #include #include #include namespace seafire::routing { template< server::parameter_name_t Name, typename ParameterType = server::string_parameter_t > class route_parameter_t { public: using parameter_type = ParameterType; using value_type = typename parameter_type::value_type; static std::string const& name() { static std::string const name{Name}; return name; } route_parameter_t(std::optional value) : _value{std::move(value)} {} std::optional const& value() const { return _value; } operator std::optional const&() const { return value(); } std::optional const* operator->() const { return &value(); } static route_parameter_t fetch(server::request_t& req) { auto v = req.extensions().use().get(name()); return parameter_type::try_parse(v); } private: std::optional _value; }; } // namespace seafire::routing #endif