espresso_node/api/
update.rs1use std::{fmt::Debug, sync::Arc};
4
5use anyhow::bail;
6use async_trait::async_trait;
7use derivative::Derivative;
8use derive_more::From;
9use espresso_types::{PubKey, v0::traits::SequencerPersistence};
10use hotshot::types::Event;
11use hotshot_query_service::data_source::UpdateDataSource;
12use hotshot_types::traits::network::ConnectedNetwork;
13
14use super::{StorageState, data_source::SequencerDataSource};
15use crate::{EventConsumer, SeqTypes};
16
17#[derive(Derivative, From)]
18#[derivative(Clone(bound = ""), Debug(bound = "D: Debug"))]
19pub(crate) struct ApiEventConsumer<N, P, D>
20where
21 N: ConnectedNetwork<PubKey>,
22 P: SequencerPersistence,
23{
24 inner: Arc<StorageState<N, P, D>>,
25}
26
27#[async_trait]
28impl<N, P, D> EventConsumer for ApiEventConsumer<N, P, D>
29where
30 N: ConnectedNetwork<PubKey>,
31 P: SequencerPersistence,
32 D: SequencerDataSource + Debug + Send + Sync + 'static,
33{
34 async fn handle_event(&self, event: &Event<SeqTypes>) -> anyhow::Result<()> {
35 if let Err(height) = self.inner.update(event).await {
36 bail!("failed to update API state after {height}: {event:?}",);
37 }
38 Ok(())
39 }
40}