record.rs (1892B)
1 use crate::utils::sqlite::{RustqliteError, SqliteResult, SqliteRow, SqliteType}; 2 use serde::Serialize; 3 4 use crate::domain::indexer::kind::{IndexerEventKind, IndexerEventKindParseError}; 5 6 #[derive(Clone, Debug, Serialize)] 7 pub struct RelayEventRecord { 8 pub rowid: Option<u64>, 9 pub event_hash: String, 10 pub author: String, 11 pub created_at: u32, 12 pub kind: IndexerEventKind, 13 pub content: String, 14 } 15 16 impl RelayEventRecord { 17 pub fn from_row(row: &SqliteRow) -> SqliteResult<Self> { 18 let event_hash: String = row.get(0)?; 19 let author: String = row.get(1)?; 20 let created_at: u32 = row.get(2)?; 21 let kind_num: u32 = row.get(3)?; 22 23 let kind = IndexerEventKind::try_from(kind_num as u64).map_err( 24 |e: IndexerEventKindParseError| { 25 RustqliteError::FromSqlConversionFailure(3, SqliteType::Integer, Box::new(e)) 26 }, 27 )?; 28 29 let content: String = row.get(4)?; 30 Ok(RelayEventRecord { 31 rowid: None, 32 event_hash, 33 author, 34 created_at, 35 kind, 36 content, 37 }) 38 } 39 40 pub fn from_row_with_rowid(row: &SqliteRow) -> SqliteResult<Self> { 41 let rowid: u64 = row.get(0)?; 42 let event_hash: String = row.get(1)?; 43 let author: String = row.get(2)?; 44 let created_at: u32 = row.get(3)?; 45 let kind_num: u32 = row.get(4)?; 46 47 let kind = IndexerEventKind::try_from(kind_num as u64).map_err( 48 |e: IndexerEventKindParseError| { 49 RustqliteError::FromSqlConversionFailure(4, SqliteType::Integer, Box::new(e)) 50 }, 51 )?; 52 53 let content: String = row.get(5)?; 54 Ok(RelayEventRecord { 55 rowid: Some(rowid), 56 event_hash, 57 author, 58 created_at, 59 kind, 60 content, 61 }) 62 } 63 }