Seafire-Resources/seafire/resources/resource-handler.txx
2025-03-07 02:25:53 +01:00

37 lines
1.0 KiB
C++

namespace seafire::resources
{
template<Resource R, typename F, typename... FactoryArgs >
resource_handler_t<R, F, FactoryArgs...>::
resource_handler_t(factory_type factory, FactoryArgs&&... args)
: factory_{std::move(factory)},
factory_args_{std::forward<FactoryArgs>(args)...}
{}
template< Resource R, typename F, typename... FactoryArgs >
void
resource_handler_t< R, F, FactoryArgs... >::
on_request(server::request_t& req,
server::response_t& res) const
{
auto factory_invoker = [f = factory(), &req, &res](auto... args)
{
return common::invoke(req, &F::template factory<resource_type>::make, f, req, res, std::forward<decltype(args)>(args)...);
};
auto r = std::apply(factory_invoker, factory_args_);
handle(req, res, r);
}
template<Resource R,
typename F,
typename... FactoryArgs,
typename H>
H
use_resource(F factory, FactoryArgs&&... args)
{
return H{std::move(factory), std::forward<FactoryArgs>(args)...};
}
} // namespace seafire::resources