brk_computer 0.2.5

A Bitcoin dataset computer built on top of brk_indexer
Documentation
use brk_error::Result;
use brk_traversable::Traversable;
use brk_types::Version;
use derive_more::{Deref, DerefMut};
use vecdb::{Database, Rw, StorageMode};

use crate::{
    indexes,
    internal::{BpsType, CachedWindowStarts, LazyRollingDeltasFiatFromHeight},
};

use super::{CentsType, FiatPerBlockCumulativeWithSums};

#[derive(Deref, DerefMut, Traversable)]
pub struct FiatPerBlockCumulativeWithSumsAndDeltas<C, CS, B, M: StorageMode = Rw>
where
    C: CentsType + Into<f64>,
    CS: CentsType + From<f64>,
    B: BpsType + From<f64>,
{
    #[deref]
    #[deref_mut]
    #[traversable(flatten)]
    pub inner: FiatPerBlockCumulativeWithSums<C, M>,
    pub delta: LazyRollingDeltasFiatFromHeight<C, CS, B>,
}

impl<C, CS, B> FiatPerBlockCumulativeWithSumsAndDeltas<C, CS, B>
where
    C: CentsType + Into<f64>,
    CS: CentsType + From<f64>,
    B: BpsType + From<f64>,
{
    pub(crate) fn forced_import(
        db: &Database,
        name: &str,
        version: Version,
        delta_version_offset: Version,
        indexes: &indexes::Vecs,
        cached_starts: &CachedWindowStarts,
    ) -> Result<Self> {
        let inner = FiatPerBlockCumulativeWithSums::forced_import(
            db,
            name,
            version,
            indexes,
            cached_starts,
        )?;

        let delta = LazyRollingDeltasFiatFromHeight::new(
            &format!("{name}_delta"),
            version + delta_version_offset,
            &inner.cumulative.cents.height,
            cached_starts,
            indexes,
        );

        Ok(Self { inner, delta })
    }
}