mirror of
https://github.com/bitcoinresearchkit/brk.git
synced 2026-07-09 18:18:14 -07:00
87 lines
2.8 KiB
Rust
87 lines
2.8 KiB
Rust
use std::path::Path;
|
|
|
|
use brk_error::Result;
|
|
use brk_types::Version;
|
|
use vecdb::ImportableVec;
|
|
|
|
use super::vecs::{ClassVecs, PeriodVecs};
|
|
use super::{ByDcaCagr, ByDcaClass, ByDcaPeriod, Vecs};
|
|
use crate::{
|
|
indexes,
|
|
internal::{
|
|
AmountPerBlock, PercentPerBlock, Price,
|
|
db_utils::{finalize_db, open_db},
|
|
},
|
|
};
|
|
|
|
impl Vecs {
|
|
pub(crate) fn forced_import(
|
|
parent_path: &Path,
|
|
parent_version: Version,
|
|
indexes: &indexes::Vecs,
|
|
) -> Result<Self> {
|
|
let db = open_db(parent_path, super::DB_NAME, 50_000)?;
|
|
let version = parent_version;
|
|
let stack = ByDcaPeriod::try_new(|name, _days| {
|
|
AmountPerBlock::forced_import(&db, &format!("dca_stack_{name}"), version, indexes)
|
|
})?;
|
|
|
|
let cost_basis = ByDcaPeriod::try_new(|name, _days| {
|
|
Price::forced_import(&db, &format!("dca_cost_basis_{name}"), version, indexes)
|
|
})?;
|
|
|
|
let r#return = ByDcaPeriod::try_new(|name, _days| {
|
|
PercentPerBlock::forced_import(&db, &format!("dca_return_{name}"), version, indexes)
|
|
})?;
|
|
|
|
let cagr = ByDcaCagr::try_new(|name, _days| {
|
|
PercentPerBlock::forced_import(&db, &format!("dca_cagr_{name}"), version, indexes)
|
|
})?;
|
|
|
|
let lump_sum_stack = ByDcaPeriod::try_new(|name, _days| {
|
|
AmountPerBlock::forced_import(&db, &format!("lump_sum_stack_{name}"), version, indexes)
|
|
})?;
|
|
|
|
let lump_sum_return = ByDcaPeriod::try_new(|name, _days| {
|
|
PercentPerBlock::forced_import(
|
|
&db,
|
|
&format!("lump_sum_return_{name}"),
|
|
version,
|
|
indexes,
|
|
)
|
|
})?;
|
|
|
|
let class_stack = ByDcaClass::try_new(|name, _year, _day1| {
|
|
AmountPerBlock::forced_import(&db, &format!("dca_stack_{name}"), version, indexes)
|
|
})?;
|
|
|
|
let class_cost_basis = ByDcaClass::try_new(|name, _year, _day1| {
|
|
Price::forced_import(&db, &format!("dca_cost_basis_{name}"), version, indexes)
|
|
})?;
|
|
|
|
let class_return = ByDcaClass::try_new(|name, _year, _day1| {
|
|
PercentPerBlock::forced_import(&db, &format!("dca_return_{name}"), version, indexes)
|
|
})?;
|
|
|
|
let this = Self {
|
|
sats_per_day: ImportableVec::forced_import(&db, "dca_sats_per_day", version)?,
|
|
period: PeriodVecs {
|
|
dca_stack: stack,
|
|
dca_cost_basis: cost_basis,
|
|
dca_return: r#return,
|
|
dca_cagr: cagr,
|
|
lump_sum_stack,
|
|
lump_sum_return,
|
|
},
|
|
class: ClassVecs {
|
|
dca_stack: class_stack,
|
|
dca_cost_basis: class_cost_basis,
|
|
dca_return: class_return,
|
|
},
|
|
db,
|
|
};
|
|
finalize_db(&this.db, &this)?;
|
|
Ok(this)
|
|
}
|
|
}
|