#[cfg(feature = "electrum")]
pub mod electrum;
#[cfg(feature = "esplora")]
pub mod esplora;
#[cfg(feature = "mempool")]
pub mod mempool;
#[cfg(any(feature = "electrum", feature = "esplora", feature = "mempool"))]
mod any;
#[cfg(any(feature = "electrum", feature = "esplora", feature = "mempool"))]
pub use any::{AnyIndexer, AnyIndexerError};
use bpstd::{Network, Tx};
use descriptors::Descriptor;
use crate::{Layer2, MayError, TxStatus, Txid, WalletCache, WalletDescr};
#[cfg(any(feature = "electrum", feature = "esplora"))]
const BATCH_SIZE: usize = 10;
pub trait Indexer {
type Error;
fn network(&self) -> Result<Network, Self::Error>;
fn create<K, D: Descriptor<K>, L2: Layer2>(
&self,
descr: &WalletDescr<K, D, L2::Descr>,
) -> MayError<WalletCache<L2::Cache>, Vec<Self::Error>>;
fn update<K, D: Descriptor<K>, L2: Layer2>(
&self,
descr: &WalletDescr<K, D, L2::Descr>,
cache: &mut WalletCache<L2::Cache>,
) -> MayError<usize, Vec<Self::Error>>;
fn broadcast(&self, tx: &Tx) -> Result<(), Self::Error>;
fn status(&self, txid: Txid) -> Result<TxStatus, Self::Error>;
}