eventify_primitives/networks/polygon/
log.rs1use eyre::Result;
2
3use sqlx::{prelude::FromRow, Error as SqlError};
4use utoipa::ToSchema;
5
6use crate::{
7 networks::{core::CoreLog, NetworkKind},
8 traits::{Emit, Insert, Log, Stream},
9 PropagateError,
10};
11
12#[derive(
13 Clone,
14 Debug,
15 Default,
16 serde::Deserialize,
17 serde::Serialize,
18 PartialEq,
19 Eq,
20 Hash,
21 FromRow,
22 ToSchema,
23)]
24pub struct PolygonLog {
25 #[serde(flatten)]
26 core: CoreLog,
27}
28
29impl Log for PolygonLog {
30 fn core(&self) -> &CoreLog {
31 &self.core
32 }
33}
34
35impl Insert for PolygonLog {
36 async fn insert(
37 &self,
38 pool: &sqlx::PgPool,
39 _: &Option<alloy_primitives::B256>,
40 ) -> Result<(), SqlError> {
41 self.core.insert(pool, NetworkKind::Ethereum).await
42 }
43}
44
45impl Emit for PolygonLog {
46 async fn emit(
47 &self,
48 queue: &redis::Client,
49 network: &crate::networks::NetworkKind,
50 ) -> eyre::Result<(), PropagateError> {
51 self.core.emit(queue, network).await
52 }
53}
54
55impl Stream for PolygonLog {
56 async fn stream(
57 &self,
58 queue: &redis::Client,
59 network: &crate::networks::NetworkKind,
60 ) -> eyre::Result<(), PropagateError> {
61 self.core.stream(queue, network).await
62 }
63}
64
65#[cfg(test)]
66mod tests {
67 use super::*;
68
69 #[test]
70 fn test_deserialize_polygon_log() {
71 let json = serde_json::json!({
72 "address": "0x0000000000000000000000000000000000001010",
73 "blockHash": "0xe582012fe151d0ccfbca2619fe9cbd629ddefa26c2ba6db223ec8ecb85a784a0",
74 "blockNumber": "0x3409f05",
75 "data": "0x0000000000000000000000000000000000000000000000000001c7fabdcb7f1c000000000000000000000000000000000000000000000000107256b94a3591ae00000000000000000000000000000000000000000002d43477d9f9d3b9e9fe8b00000000000000000000000000000000000000000000000010708ebe8c6a129200000000000000000000000000000000000000000002d43477dbc1ce77b57da7",
76 "logIndex": "0x197",
77 "removed": false,
78 "topics": [
79 "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63",
80 "0x0000000000000000000000000000000000000000000000000000000000001010",
81 "0x00000000000000000000000065dfdda994f3d956630b09f6f26d90c67b7aab36",
82 "0x0000000000000000000000007c7379531b2aee82e4ca06d4175d13b9cbeafd49"
83 ],
84 "transactionHash": "0x3a83d5b3fe3c4a2ddfc4965ba8470adc4dedd58e1864b778dd1c8242a981b436",
85 "transactionIndex": "0x7b"
86 });
87
88 assert!(serde_json::from_value::<PolygonLog>(json).is_ok());
89 }
90
91 #[test]
92 fn test_deserialize_empty_polygon_log() {
93 let json = serde_json::json!({});
94
95 assert!(serde_json::from_value::<PolygonLog>(json).is_err());
96 }
97}