From 42cfefd7d366c6a9e8947dc747ebd330f8d6ac52 Mon Sep 17 00:00:00 2001 From: Ryan Date: Sat, 17 Jan 2026 10:36:02 +0100 Subject: [PATCH] Experiment with new resource factory method --- art/seafire/resources/resource-handler.hxx | 23 ++++-------------- art/seafire/resources/resource-handler.txx | 28 +++++++--------------- 2 files changed, 13 insertions(+), 38 deletions(-) diff --git a/art/seafire/resources/resource-handler.hxx b/art/seafire/resources/resource-handler.hxx index bd8f29c..9c9867c 100644 --- a/art/seafire/resources/resource-handler.hxx +++ b/art/seafire/resources/resource-handler.hxx @@ -22,22 +22,12 @@ namespace art::seafire::resources { - template + template class resource_handler_t { public: using resource_type = R; - using factory_type = F; - explicit - resource_handler_t(factory_type factory, FactoryArgs&&... args); - - factory_type const& - factory() const - { - return factory_; - } + resource_handler_t(); void on_request(server::request_t& req, server::response_t& res) const; @@ -48,16 +38,11 @@ namespace art::seafire::resources on_request(req, res); } - private: - factory_type factory_; - std::tuple factory_args_; }; template> - H use_resource(F factory, FactoryArgs&&... args); + typename H = resource_handler_t> + H use_resource(); } // namespace art::seafire::resources diff --git a/art/seafire/resources/resource-handler.txx b/art/seafire/resources/resource-handler.txx index 9f53744..03e72ef 100644 --- a/art/seafire/resources/resource-handler.txx +++ b/art/seafire/resources/resource-handler.txx @@ -1,36 +1,26 @@ namespace art::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_handler_t:: + resource_handler_t() {} - template< Resource R, typename F, typename... FactoryArgs > + template< Resource R> void - resource_handler_t< R, F, FactoryArgs... >:: + resource_handler_t:: on_request(server::request_t& req, server::response_t& res) const { - auto factory_invoker = [f = factory(), &req, &res](auto... args) -> decltype(auto) - { - return common::invoke(req, &F::template factory::make, f, req, res, std::forward(args)...); - }; - - auto&& r = std::apply(factory_invoker, factory_args_); + auto&& r = common::invoke(req, &R::make, req, res); handle(req, res, r); } - template + template H - use_resource(F factory, FactoryArgs&&... args) + use_resource() { - return H{std::move(factory), std::forward(args)...}; + return H{}; } } // namespace art::seafire::resources