nautilus_blockchain/cache/
rows.rs1use alloy::primitives::Address;
17use nautilus_core::UnixNanos;
18use nautilus_model::defi::validation::validate_address;
19use sqlx::{FromRow, Row, postgres::PgRow};
20
21#[derive(Debug)]
26pub struct TokenRow {
27 pub address: Address,
28 pub name: String,
29 pub symbol: String,
30 pub decimals: i32,
31}
32
33impl<'r> FromRow<'r, PgRow> for TokenRow {
34 fn from_row(row: &'r PgRow) -> Result<Self, sqlx::Error> {
35 let address = validate_address(row.try_get::<String, _>("address")?.as_str()).unwrap();
36 let name = row.try_get::<String, _>("name")?;
37 let symbol = row.try_get::<String, _>("symbol")?;
38 let decimals = row.try_get::<i32, _>("decimals")?;
39
40 let token = Self {
41 address,
42 name,
43 symbol,
44 decimals,
45 };
46 Ok(token)
47 }
48}
49
50#[derive(Debug)]
51pub struct PoolRow {
52 pub address: Address,
53 pub dex_name: String,
54 pub creation_block: i64,
55 pub token0_chain: i32,
56 pub token0_address: Address,
57 pub token1_chain: i32,
58 pub token1_address: Address,
59 pub fee: Option<i32>,
60 pub tick_spacing: Option<i32>,
61}
62
63impl<'r> FromRow<'r, PgRow> for PoolRow {
64 fn from_row(row: &'r PgRow) -> Result<Self, sqlx::Error> {
65 let address = validate_address(row.try_get::<String, _>("address")?.as_str()).unwrap();
66 let dex_name = row.try_get::<String, _>("dex_name")?;
67 let creation_block = row.try_get::<i64, _>("creation_block")?;
68 let token0_chain = row.try_get::<i32, _>("token0_chain")?;
69 let token0_address =
70 validate_address(row.try_get::<String, _>("token0_address")?.as_str()).unwrap();
71 let token1_chain = row.try_get::<i32, _>("token1_chain")?;
72 let token1_address =
73 validate_address(row.try_get::<String, _>("token1_address")?.as_str()).unwrap();
74 let fee = row.try_get::<Option<i32>, _>("fee")?;
75 let tick_spacing = row.try_get::<Option<i32>, _>("tick_spacing")?;
76
77 Ok(Self {
78 address,
79 dex_name,
80 creation_block,
81 token0_chain,
82 token0_address,
83 token1_chain,
84 token1_address,
85 fee,
86 tick_spacing,
87 })
88 }
89}
90
91#[derive(Debug)]
93pub struct BlockTimestampRow {
94 pub number: u64,
96 pub timestamp: UnixNanos,
98}
99
100impl FromRow<'_, PgRow> for BlockTimestampRow {
101 fn from_row(row: &PgRow) -> Result<Self, sqlx::Error> {
102 let number = row.try_get::<i64, _>("number")? as u64;
103 let timestamp = row.try_get::<String, _>("timestamp")?;
104 Ok(Self {
105 number,
106 timestamp: UnixNanos::from(timestamp),
107 })
108 }
109}