reth_node_builder/
hooks.rs1use std::fmt;
2
3use reth_node_api::{FullNodeComponents, NodeAddOns};
4
5use crate::node::FullNode;
6
7pub struct NodeHooks<Node: FullNodeComponents, AddOns: NodeAddOns<Node>> {
9 pub on_component_initialized: Box<dyn OnComponentInitializedHook<Node>>,
11 pub on_node_started: Box<dyn OnNodeStartedHook<Node, AddOns>>,
13}
14
15impl<Node, AddOns> NodeHooks<Node, AddOns>
16where
17 Node: FullNodeComponents,
18 AddOns: NodeAddOns<Node>,
19{
20 pub fn new() -> Self {
22 Self {
23 on_component_initialized: Box::<()>::default(),
24 on_node_started: Box::<()>::default(),
25 }
26 }
27
28 pub(crate) fn set_on_component_initialized<F>(&mut self, hook: F) -> &mut Self
30 where
31 F: OnComponentInitializedHook<Node> + 'static,
32 {
33 self.on_component_initialized = Box::new(hook);
34 self
35 }
36
37 #[expect(unused)]
39 pub(crate) fn on_component_initialized<F>(mut self, hook: F) -> Self
40 where
41 F: OnComponentInitializedHook<Node> + 'static,
42 {
43 self.set_on_component_initialized(hook);
44 self
45 }
46
47 pub(crate) fn set_on_node_started<F>(&mut self, hook: F) -> &mut Self
49 where
50 F: OnNodeStartedHook<Node, AddOns> + 'static,
51 {
52 self.on_node_started = Box::new(hook);
53 self
54 }
55
56 #[expect(unused)]
58 pub(crate) fn on_node_started<F>(mut self, hook: F) -> Self
59 where
60 F: OnNodeStartedHook<Node, AddOns> + 'static,
61 {
62 self.set_on_node_started(hook);
63 self
64 }
65}
66
67impl<Node, AddOns> Default for NodeHooks<Node, AddOns>
68where
69 Node: FullNodeComponents,
70 AddOns: NodeAddOns<Node>,
71{
72 fn default() -> Self {
73 Self::new()
74 }
75}
76impl<Node, AddOns> fmt::Debug for NodeHooks<Node, AddOns>
77where
78 Node: FullNodeComponents,
79 AddOns: NodeAddOns<Node>,
80{
81 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
82 f.debug_struct("NodeHooks")
83 .field("on_component_initialized", &"...")
84 .field("on_node_started", &"...")
85 .finish()
86 }
87}
88
89pub trait OnComponentInitializedHook<Node>: Send {
91 fn on_event(self: Box<Self>, node: Node) -> eyre::Result<()>;
95}
96
97impl<Node, F> OnComponentInitializedHook<Node> for F
98where
99 F: FnOnce(Node) -> eyre::Result<()> + Send,
100{
101 fn on_event(self: Box<Self>, node: Node) -> eyre::Result<()> {
102 (*self)(node)
103 }
104}
105
106pub trait OnNodeStartedHook<Node: FullNodeComponents, AddOns: NodeAddOns<Node>>: Send {
108 fn on_event(self: Box<Self>, node: FullNode<Node, AddOns>) -> eyre::Result<()>;
112}
113
114impl<Node, AddOns, F> OnNodeStartedHook<Node, AddOns> for F
115where
116 Node: FullNodeComponents,
117 AddOns: NodeAddOns<Node>,
118 F: FnOnce(FullNode<Node, AddOns>) -> eyre::Result<()> + Send,
119{
120 fn on_event(self: Box<Self>, node: FullNode<Node, AddOns>) -> eyre::Result<()> {
121 (*self)(node)
122 }
123}
124
125impl<Node> OnComponentInitializedHook<Node> for () {
126 fn on_event(self: Box<Self>, _node: Node) -> eyre::Result<()> {
127 Ok(())
128 }
129}
130
131impl<Node, AddOns> OnNodeStartedHook<Node, AddOns> for ()
132where
133 Node: FullNodeComponents,
134 AddOns: NodeAddOns<Node>,
135{
136 fn on_event(self: Box<Self>, _node: FullNode<Node, AddOns>) -> eyre::Result<()> {
137 Ok(())
138 }
139}