69 lines
1.3 KiB
C++
69 lines
1.3 KiB
C++
|
#ifndef seafire__routing__route_parameter_hxx_
|
||
|
#define seafire__routing__route_parameter_hxx_
|
||
|
|
||
|
#include <seafire/server/parameters.hxx>
|
||
|
#include <seafire/server/request.hxx>
|
||
|
|
||
|
#include <seafire/routing/route-parameters.hxx>
|
||
|
|
||
|
#include <optional>
|
||
|
|
||
|
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_type> value)
|
||
|
: _value{std::move(value)}
|
||
|
{}
|
||
|
|
||
|
std::optional<value_type> const&
|
||
|
value() const
|
||
|
{
|
||
|
return _value;
|
||
|
}
|
||
|
|
||
|
operator std::optional<value_type> const&() const
|
||
|
{
|
||
|
return value();
|
||
|
}
|
||
|
|
||
|
std::optional<value_type> const*
|
||
|
operator->() const
|
||
|
{
|
||
|
return &value();
|
||
|
}
|
||
|
|
||
|
static
|
||
|
route_parameter_t<Name, ParameterType>
|
||
|
fetch(server::request_t& req)
|
||
|
{
|
||
|
auto v = req.extensions().use<route_parameters_t>().get(name());
|
||
|
return parameter_type::try_parse(v);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
std::optional<value_type> _value;
|
||
|
|
||
|
};
|
||
|
|
||
|
} // namespace seafire::routing
|
||
|
|
||
|
#endif
|