capydi
Loading...
Searching...
No Matches
OnObjectCreated.hpp
Go to the documentation of this file.
1#ifndef CAPYDI_ON_OBJECT_CREATED_HPP_
2#define CAPYDI_ON_OBJECT_CREATED_HPP_
3
5#include "DiAction.hpp"
6
11#include "capydi/Error.hpp"
12
15#include <optional>
16
17namespace capy::di
18{
19
20template<
21 typename RelatedEntity_,
22 typename Action,
23 std::size_t SIZE
24>
27 OnObjectCreated<RelatedEntity_, Action, SIZE>
28 >
29{
30public:
31 using RelatedEntity = RelatedEntity_;
33
34public:
36
37public:
38 constexpr explicit OnObjectCreated(
41 )
42 : di_action_ { std::move(action) }
43 {}
44
45public:
48 meta::Reference<RelatedEntity> auto decoratee,
50 ) const
51 {
52 if (!context.flags.just_created) [[unlikely]]
53 {
54 return std::expected<decltype(decoratee), Error> {
55 decoratee
56 };
57 }
58
59 return execute_di_action(this->di_action_, context)
60 .transform([&] {
61 return decoratee;
62 })
63 .transform_error([](DiActionError action_error) {
64 switch (action_error)
65 {
70 default:
71 std::unreachable();
72 }
73 });
74 }
75
76private:
77 DiAction<Action, SIZE> di_action_;
78};
79
80}
81
82#endif // !CAPYDI_ON_OBJECT_CREATED_HPP_
Error codes and diagnostics for dependency injection operations.
Compile-time type pack utilities and metaprogramming foundations.
Resolution concept and result type for dependency injection queries.
constexpr OnObjectCreated(meta::Unit< RelatedEntity_ >, DiAction< Action, SIZE > &&action)
Definition OnObjectCreated.hpp:38
static constexpr ConfigType CONFIG_TYPE
Definition OnObjectCreated.hpp:35
Resolution< RelatedEntity, Error > auto pipe(meta::Reference< RelatedEntity > auto decoratee, meta::wrapped_with< ResolutionContext > auto &context) const
Definition OnObjectCreated.hpp:47
meta::Pack< meta::Pack< RelatedEntity_ > > RelatedKeysPack
Definition OnObjectCreated.hpp:32
RelatedEntity_ RelatedEntity
Definition OnObjectCreated.hpp:31
Definition Resolution.hpp:30
Definition Reference.hpp:10
Definition WrappedWIth.hpp:30
Definition Decorator.hpp:19
auto execute_di_action(DiAction_ const &di_action, auto &context)
Definition DiAction.hpp:58
ConfigType
Categorization of configuration strategies in the DI container.
Definition ConfigType.hpp:24
@ CHAINABLE
Chainable configs form a pipeline of transformations applied after creation. Examples: proxies,...
Definition ConfigType.hpp:35
@ SIZE
Sentinel value for bounds checking and iteration.
Definition ConfigType.hpp:38
Error
Enumeration of possible errors during dependency injection resolution.
Definition Error.hpp:26
@ OBSERVER_ACTION_EXECUTION_FAILURE
Definition Error.hpp:47
@ OBSERVER_COULD_NOT_RESOLVE_TYPE
Definition Error.hpp:45
DiActionError
Definition DiAction.hpp:52
@ DI_ACTION_UNABLE_TO_RESOLVE_ARGS
Definition DiAction.hpp:53
@ DI_ACTION_EXECUTION_ERROR
Definition DiAction.hpp:54
Definition DecoratableConfig.hpp:22
Definition DiAction.hpp:21
A compile-time heterogeneous type list.
Definition Pack.hpp:70
A zero-cost wrapper for forwarding compile-time type information.
Definition Pack.hpp:45