eventify_primitives/
lib.rs

1#![doc = include_str!("../README.md")]
2#![warn(missing_debug_implementations, unreachable_pub, rustdoc::all)]
3#![deny(unused_must_use, rust_2018_idioms)]
4
5pub mod criteria;
6pub mod events;
7pub mod networks;
8
9pub mod ethereum {
10    pub use crate::networks::ethereum::{block::EthBlock as Block, log::EthLog as Log};
11}
12
13pub mod zksync {
14    pub use crate::networks::zksync::{block::ZksyncBlock as Block, log::ZksyncLog as Log};
15}
16
17pub mod polygon {
18    pub use crate::networks::polygon::{block::PolygonBlock as Block, log::PolygonLog as Log};
19}
20
21pub mod optimism {
22    pub use crate::networks::optimism::{block::OptimismBlock as Block, log::OptimismLog as Log};
23}
24
25pub mod arbitrum {
26    pub use crate::networks::arbitrum::{block::ArbitrumBlock as Block, log::ArbitrumLog as Log};
27}
28
29pub mod linea {
30    pub use crate::networks::linea::{block::LineaBlock as Block, log::LineaLog as Log};
31}
32
33pub mod avalanche {
34    pub use crate::networks::avalanche::{
35        block::AvalancheBlock as Block, log::AvalancheLog as Log,
36    };
37}
38
39pub mod bsc {
40    pub use crate::networks::bsc::{block::BscBlock as Block, log::BscLog as Log};
41}
42
43pub mod base {
44    pub use crate::networks::base::{block::BaseBlock as Block, log::BaseLog as Log};
45}
46
47pub use traits::{
48    Block as BlockT, Emit as EmitT, Insert as InsertT, Log as LogT, Stream as StreamT,
49};
50
51#[derive(thiserror::Error, Debug)]
52pub enum PropagateError {
53    #[error("err streaming `{0}`")]
54    StreamError(String),
55    #[error(transparent)]
56    EmitError(#[from] redis::RedisError),
57    #[error(transparent)]
58    SerdeError(#[from] serde_json::Error),
59}
60
61mod traits {
62    pub trait Insert: Sync + Send {
63        fn insert(
64            &self,
65            pool: &sqlx::PgPool,
66            tx_hash: &Option<alloy_primitives::B256>,
67        ) -> impl std::future::Future<Output = eyre::Result<(), sqlx::Error>> + Send;
68    }
69
70    pub trait Emit: Sync + Send {
71        fn emit(
72            &self,
73            queue: &redis::Client,
74            network: &crate::networks::NetworkKind,
75        ) -> impl std::future::Future<Output = eyre::Result<(), super::PropagateError>> + Send;
76    }
77
78    pub trait Stream: Sync + Sync {
79        //type MaxLen: Default + Sized;
80
81        fn stream(
82            &self,
83            queue: &redis::Client,
84            network: &crate::networks::NetworkKind,
85        ) -> impl std::future::Future<Output = eyre::Result<(), super::PropagateError>> + Send;
86    }
87
88    pub trait Block:
89        Insert
90        + Emit
91        + Stream
92        + Clone
93        + std::fmt::Debug
94        + Default
95        + PartialEq
96        + Eq
97        + std::hash::Hash
98        + serde::Serialize
99        + serde::de::DeserializeOwned
100        + Sync
101        + Send
102    {
103        fn core(&self) -> &crate::networks::core::CoreBlock;
104    }
105
106    pub trait Log:
107        Insert
108        + Emit
109        + Stream
110        + Clone
111        + std::fmt::Debug
112        + Default
113        + PartialEq
114        + Eq
115        + std::hash::Hash
116        + serde::Serialize
117        + serde::de::DeserializeOwned
118        + Sync
119        + Send
120    {
121        fn core(&self) -> &crate::networks::core::CoreLog;
122    }
123}