eventify_primitives/networks/polygon/
log.rs

1use 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}