eventify_primitives/
lib.rs1#![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 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}