electrs_client 0.2.9

A client for electrs
Documentation
use nintypes::common::hash::Hash256;
use serde::{Deserialize, Serialize};

use crate::{cache::UpdateCapable, BlockHeight};

/// block metadata
#[derive(Clone, Copy, Default, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct BlockMeta {
    pub height: BlockHeight,
    pub hash: Hash256,
    pub prev_block_hash: Hash256,
}

impl From<nintypes::external::electrs::BlockInfo> for BlockMeta {
    fn from(value: nintypes::external::electrs::BlockInfo) -> Self {
        Self {
            hash: value.block_hash,
            height: value.height.0,
            prev_block_hash: value.prev_block_hash,
        }
    }
}

#[derive(Clone, Default, Deserialize)]
pub struct BlockMetaWithoutPrevHash {
    pub ord_height: BlockHeight,
    pub ord_tip: String,
}

pub enum Update<Block: serde::Serialize + serde::de::DeserializeOwned> {
    AddBlock(UpdateCapable<Block>),
    RemoveBlock {
        height: BlockHeight,
        block: Option<UpdateCapable<Block>>,
    },
}

impl<Block: serde::Serialize + serde::de::DeserializeOwned> Update<Block> {
    pub fn get_height(&self) -> BlockHeight {
        match self {
            Self::AddBlock(UpdateCapable {
                block: BlockMeta { height, .. },
                ..
            })
            | Self::RemoveBlock { height, .. } => *height,
        }
    }

    pub fn is_remove(&self) -> bool {
        match self {
            Self::AddBlock { .. } => false,
            Self::RemoveBlock { .. } => true,
        }
    }
}