reth_node_builder/
engine_api_ext.rs1use crate::rpc::EngineApiBuilder;
6use eyre::Result;
7use reth_node_api::{AddOnsContext, FullNodeComponents};
8
9#[derive(Debug)]
11pub struct EngineApiExt<B, F> {
12 inner: B,
14 callback: Option<F>,
16}
17
18impl<B, F> EngineApiExt<B, F> {
19 pub const fn new(inner: B, callback: F) -> Self {
21 Self { inner, callback: Some(callback) }
22 }
23}
24
25impl<N, B, F> EngineApiBuilder<N> for EngineApiExt<B, F>
26where
27 B: EngineApiBuilder<N>,
28 N: FullNodeComponents,
29 B::EngineApi: Clone,
30 F: FnOnce(B::EngineApi) + Send + Sync + 'static,
31{
32 type EngineApi = B::EngineApi;
33
34 async fn build_engine_api(mut self, ctx: &AddOnsContext<'_, N>) -> Result<Self::EngineApi> {
36 let api = self.inner.build_engine_api(ctx).await?;
37
38 if let Some(callback) = self.callback.take() {
39 callback(api.clone());
40 }
41
42 Ok(api)
43 }
44}