namespace seafire::resources { template resource_handler_t:: resource_handler_t(factory_type factory, FactoryArgs&&... args) : factory_{std::move(factory)}, factory_args_{std::forward(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::make, f, req, res, std::forward(args)...); }; auto r = std::apply(factory_invoker, factory_args_); handle(req, res, r); } template H use_resource(F factory, FactoryArgs&&... args) { return H{std::move(factory), std::forward(args)...}; } } // namespace seafire::resources