chainhook_types/
processors.rs

1use std::collections::BTreeMap;
2
3use super::{BitcoinBlockData, BitcoinTransactionData, StacksBlockData, StacksTransactionData};
4use serde_json::Value as JsonValue;
5
6pub struct ProcessedStacksTransaction {
7    pub tx: StacksTransactionData,
8    pub metadata: BTreeMap<String, JsonValue>,
9}
10
11pub struct ProcessedStacksBlock {
12    pub tx: StacksBlockData,
13    pub metadata: BTreeMap<String, JsonValue>,
14}
15
16pub struct ProcessedBitcoinTransaction {
17    pub tx: BitcoinTransactionData,
18    pub metadata: BTreeMap<String, JsonValue>,
19}
20
21pub struct ProcessedBitcoinBlock {
22    pub tx: BitcoinBlockData,
23    pub metadata: BTreeMap<String, JsonValue>,
24}
25
26pub enum ProcessingContext {
27    Scanning,
28    Streaming,
29}
30
31pub trait BitcoinProtocolProcessor {
32    fn register(&mut self);
33    fn process_block(
34        &mut self,
35        block: &mut ProcessedBitcoinBlock,
36        processing_context: ProcessingContext,
37    );
38    fn process_transaction(
39        &mut self,
40        transaction: &mut ProcessedBitcoinTransaction,
41        processing_context: ProcessingContext,
42    );
43}
44
45pub fn run_processor<P>(mut p: P)
46where
47    P: BitcoinProtocolProcessor,
48{
49    p.register();
50}