mirror of
https://github.com/bitcoinresearchkit/brk.git
synced 2026-04-26 07:39:59 -07:00
global: BIG snapshot
This commit is contained in:
@@ -60,7 +60,7 @@ where
|
||||
first: options.first.then(|| {
|
||||
Box::new(LazyVecFrom2::init(
|
||||
&maybe_suffix("first"),
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
source_extra
|
||||
.first
|
||||
.as_ref()
|
||||
@@ -77,7 +77,7 @@ where
|
||||
last: options.last.then(|| {
|
||||
Box::new(LazyVecFrom2::init(
|
||||
name,
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
source_extra.last.as_ref().map_or_else(
|
||||
|| {
|
||||
source
|
||||
@@ -102,7 +102,7 @@ where
|
||||
min: options.min.then(|| {
|
||||
Box::new(LazyVecFrom2::init(
|
||||
&maybe_suffix("min"),
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
source_extra
|
||||
.min
|
||||
.as_ref()
|
||||
@@ -121,7 +121,7 @@ where
|
||||
max: options.max.then(|| {
|
||||
Box::new(LazyVecFrom2::init(
|
||||
&maybe_suffix("max"),
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
source_extra
|
||||
.max
|
||||
.as_ref()
|
||||
@@ -140,7 +140,7 @@ where
|
||||
average: options.average.then(|| {
|
||||
Box::new(LazyVecFrom2::init(
|
||||
&maybe_suffix("avg"),
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
source_extra
|
||||
.average
|
||||
.as_ref()
|
||||
@@ -172,7 +172,7 @@ where
|
||||
} else {
|
||||
maybe_suffix("sum")
|
||||
}),
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
source_extra
|
||||
.sum
|
||||
.as_ref()
|
||||
@@ -200,7 +200,7 @@ where
|
||||
cumulative: options.cumulative.then(|| {
|
||||
Box::new(LazyVecFrom2::init(
|
||||
&suffix("cumulative"),
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
source_extra.cumulative.u().boxed_clone(),
|
||||
len_source.clone(),
|
||||
|i: I, source, len_source| {
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
use brk_error::Result;
|
||||
use brk_traversable::Traversable;
|
||||
use brk_types::{
|
||||
DateIndex, DecadeIndex, MonthIndex, QuarterIndex, SemesterIndex, Version, WeekIndex, YearIndex,
|
||||
DateIndex, DecadeIndex, MonthIndex, QuarterIndex, SemesterIndex, TreeNode, Version, WeekIndex,
|
||||
YearIndex,
|
||||
};
|
||||
use schemars::JsonSchema;
|
||||
use vecdb::{
|
||||
@@ -9,7 +10,7 @@ use vecdb::{
|
||||
PcoVec,
|
||||
};
|
||||
|
||||
use crate::{ComputeIndexes, internal::LazyVecsBuilder, indexes, utils::OptionExt};
|
||||
use crate::{ComputeIndexes, indexes, internal::LazyVecsBuilder, utils::OptionExt};
|
||||
|
||||
use crate::internal::{ComputedVecValue, EagerVecsBuilder, Source, VecBuilderOptions};
|
||||
|
||||
@@ -45,12 +46,12 @@ where
|
||||
) -> Result<Self> {
|
||||
let dateindex = source
|
||||
.is_compute()
|
||||
.then(|| EagerVec::forced_import(db, name, version + VERSION + Version::ZERO).unwrap());
|
||||
.then(|| EagerVec::forced_import(db, name, version + VERSION).unwrap());
|
||||
|
||||
let dateindex_extra = EagerVecsBuilder::forced_import(
|
||||
db,
|
||||
name,
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
options.copy_self_extra(),
|
||||
)?;
|
||||
|
||||
@@ -61,7 +62,7 @@ where
|
||||
Ok(Self {
|
||||
weekindex: LazyVecsBuilder::forced_import(
|
||||
name,
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
dateindex_source.clone(),
|
||||
&dateindex_extra,
|
||||
indexes.time.weekindex_to_weekindex.boxed_clone(),
|
||||
@@ -69,7 +70,7 @@ where
|
||||
),
|
||||
monthindex: LazyVecsBuilder::forced_import(
|
||||
name,
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
dateindex_source.clone(),
|
||||
&dateindex_extra,
|
||||
indexes.time.monthindex_to_monthindex.boxed_clone(),
|
||||
@@ -77,7 +78,7 @@ where
|
||||
),
|
||||
quarterindex: LazyVecsBuilder::forced_import(
|
||||
name,
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
dateindex_source.clone(),
|
||||
&dateindex_extra,
|
||||
indexes.time.quarterindex_to_quarterindex.boxed_clone(),
|
||||
@@ -85,7 +86,7 @@ where
|
||||
),
|
||||
semesterindex: LazyVecsBuilder::forced_import(
|
||||
name,
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
dateindex_source.clone(),
|
||||
&dateindex_extra,
|
||||
indexes.time.semesterindex_to_semesterindex.boxed_clone(),
|
||||
@@ -93,7 +94,7 @@ where
|
||||
),
|
||||
yearindex: LazyVecsBuilder::forced_import(
|
||||
name,
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
dateindex_source.clone(),
|
||||
&dateindex_extra,
|
||||
indexes.time.yearindex_to_yearindex.boxed_clone(),
|
||||
@@ -101,7 +102,7 @@ where
|
||||
),
|
||||
decadeindex: LazyVecsBuilder::forced_import(
|
||||
name,
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
dateindex_source.clone(),
|
||||
&dateindex_extra,
|
||||
indexes.time.decadeindex_to_decadeindex.boxed_clone(),
|
||||
@@ -151,9 +152,9 @@ impl<T> Traversable for ComputedVecsFromDateIndex<T>
|
||||
where
|
||||
T: ComputedVecValue + JsonSchema,
|
||||
{
|
||||
fn to_tree_node(&self) -> brk_traversable::TreeNode {
|
||||
fn to_tree_node(&self) -> TreeNode {
|
||||
let dateindex_extra_node = self.dateindex_extra.to_tree_node();
|
||||
brk_traversable::TreeNode::Branch(
|
||||
TreeNode::Branch(
|
||||
[
|
||||
self.dateindex
|
||||
.as_ref()
|
||||
|
||||
@@ -3,7 +3,7 @@ use brk_error::Result;
|
||||
use brk_traversable::Traversable;
|
||||
use brk_types::{
|
||||
DateIndex, DecadeIndex, DifficultyEpoch, Height, MonthIndex, QuarterIndex, SemesterIndex,
|
||||
Version, WeekIndex, YearIndex,
|
||||
TreeNode, Version, WeekIndex, YearIndex,
|
||||
};
|
||||
use schemars::JsonSchema;
|
||||
use vecdb::{
|
||||
@@ -12,9 +12,8 @@ use vecdb::{
|
||||
};
|
||||
|
||||
use crate::{
|
||||
ComputeIndexes,
|
||||
ComputeIndexes, indexes,
|
||||
internal::{LazyVecsBuilder, Source},
|
||||
indexes,
|
||||
utils::OptionExt,
|
||||
};
|
||||
|
||||
@@ -56,17 +55,16 @@ where
|
||||
) -> Result<Self> {
|
||||
let height = source
|
||||
.is_compute()
|
||||
.then(|| EagerVec::forced_import(db, name, version + VERSION + Version::ZERO).unwrap());
|
||||
.then(|| EagerVec::forced_import(db, name, version + VERSION).unwrap());
|
||||
|
||||
let height_extra = EagerVecsBuilder::forced_import(
|
||||
db,
|
||||
name,
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
options.copy_self_extra(),
|
||||
)?;
|
||||
|
||||
let dateindex =
|
||||
EagerVecsBuilder::forced_import(db, name, version + VERSION + Version::ZERO, options)?;
|
||||
let dateindex = EagerVecsBuilder::forced_import(db, name, version + VERSION, options)?;
|
||||
|
||||
let options = options.remove_percentiles();
|
||||
|
||||
@@ -75,7 +73,7 @@ where
|
||||
Ok(Self {
|
||||
weekindex: LazyVecsBuilder::forced_import(
|
||||
name,
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
None,
|
||||
&dateindex,
|
||||
indexes.time.weekindex_to_weekindex.boxed_clone(),
|
||||
@@ -83,7 +81,7 @@ where
|
||||
),
|
||||
monthindex: LazyVecsBuilder::forced_import(
|
||||
name,
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
None,
|
||||
&dateindex,
|
||||
indexes.time.monthindex_to_monthindex.boxed_clone(),
|
||||
@@ -91,7 +89,7 @@ where
|
||||
),
|
||||
quarterindex: LazyVecsBuilder::forced_import(
|
||||
name,
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
None,
|
||||
&dateindex,
|
||||
indexes.time.quarterindex_to_quarterindex.boxed_clone(),
|
||||
@@ -99,7 +97,7 @@ where
|
||||
),
|
||||
semesterindex: LazyVecsBuilder::forced_import(
|
||||
name,
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
None,
|
||||
&dateindex,
|
||||
indexes.time.semesterindex_to_semesterindex.boxed_clone(),
|
||||
@@ -107,7 +105,7 @@ where
|
||||
),
|
||||
yearindex: LazyVecsBuilder::forced_import(
|
||||
name,
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
None,
|
||||
&dateindex,
|
||||
indexes.time.yearindex_to_yearindex.boxed_clone(),
|
||||
@@ -115,19 +113,22 @@ where
|
||||
),
|
||||
decadeindex: LazyVecsBuilder::forced_import(
|
||||
name,
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
None,
|
||||
&dateindex,
|
||||
indexes.time.decadeindex_to_decadeindex.boxed_clone(),
|
||||
options.into(),
|
||||
),
|
||||
// halvingepoch: StorableVecGeneator::forced_import(db, name, version + VERSION + Version::ZERO, format, options)?,
|
||||
// halvingepoch: StorableVecGeneator::forced_import(db, name, version + VERSION , format, options)?,
|
||||
difficultyepoch: LazyVecsBuilder::forced_import(
|
||||
name,
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
height_source,
|
||||
&height_extra,
|
||||
indexes.block.difficultyepoch_to_difficultyepoch.boxed_clone(),
|
||||
indexes
|
||||
.block
|
||||
.difficultyepoch_to_difficultyepoch
|
||||
.boxed_clone(),
|
||||
options.into(),
|
||||
),
|
||||
height,
|
||||
@@ -193,9 +194,9 @@ impl<T> Traversable for ComputedVecsFromHeight<T>
|
||||
where
|
||||
T: ComputedVecValue + JsonSchema,
|
||||
{
|
||||
fn to_tree_node(&self) -> brk_traversable::TreeNode {
|
||||
fn to_tree_node(&self) -> TreeNode {
|
||||
let height_extra_node = self.height_extra.to_tree_node();
|
||||
brk_traversable::TreeNode::Branch(
|
||||
TreeNode::Branch(
|
||||
[
|
||||
self.height
|
||||
.as_ref()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use brk_error::Result;
|
||||
|
||||
use brk_traversable::Traversable;
|
||||
use brk_types::{DifficultyEpoch, Height, Version};
|
||||
use brk_types::{DifficultyEpoch, Height, TreeNode, Version};
|
||||
use schemars::JsonSchema;
|
||||
use vecdb::{
|
||||
AnyExportableVec, Database, EagerVec, Exit, ImportableVec, IterableCloneableVec, PcoVec,
|
||||
@@ -36,12 +36,12 @@ where
|
||||
indexes: &indexes::Vecs,
|
||||
options: VecBuilderOptions,
|
||||
) -> Result<Self> {
|
||||
let height = EagerVec::forced_import(db, name, version + VERSION + Version::ZERO)?;
|
||||
let height = EagerVec::forced_import(db, name, version + VERSION)?;
|
||||
|
||||
let height_extra = EagerVecsBuilder::forced_import(
|
||||
db,
|
||||
name,
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
options.copy_self_extra(),
|
||||
)?;
|
||||
|
||||
@@ -50,15 +50,18 @@ where
|
||||
Ok(Self {
|
||||
difficultyepoch: LazyVecsBuilder::forced_import(
|
||||
name,
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
Some(height.boxed_clone()),
|
||||
&height_extra,
|
||||
indexes.block.difficultyepoch_to_difficultyepoch.boxed_clone(),
|
||||
indexes
|
||||
.block
|
||||
.difficultyepoch_to_difficultyepoch
|
||||
.boxed_clone(),
|
||||
options.into(),
|
||||
),
|
||||
height,
|
||||
height_extra,
|
||||
// halvingepoch: StorableVecGeneator::forced_import(db, name, version + VERSION + Version::ZERO, format, options)?,
|
||||
// halvingepoch: StorableVecGeneator::forced_import(db, name, version + VERSION , format, options)?,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -84,9 +87,9 @@ impl<T> Traversable for ComputedVecsFromHeightStrict<T>
|
||||
where
|
||||
T: ComputedVecValue + JsonSchema,
|
||||
{
|
||||
fn to_tree_node(&self) -> brk_traversable::TreeNode {
|
||||
fn to_tree_node(&self) -> TreeNode {
|
||||
let height_extra_node = self.height_extra.to_tree_node();
|
||||
brk_traversable::TreeNode::Branch(
|
||||
TreeNode::Branch(
|
||||
[
|
||||
Some(("height".to_string(), self.height.to_tree_node())),
|
||||
if height_extra_node.is_empty() {
|
||||
|
||||
@@ -3,7 +3,7 @@ use brk_indexer::Indexer;
|
||||
use brk_traversable::Traversable;
|
||||
use brk_types::{
|
||||
Bitcoin, DateIndex, DecadeIndex, DifficultyEpoch, Dollars, Height, MonthIndex, QuarterIndex,
|
||||
Sats, SemesterIndex, TxIndex, Version, WeekIndex, YearIndex,
|
||||
Sats, SemesterIndex, TreeNode, TxIndex, Version, WeekIndex, YearIndex,
|
||||
};
|
||||
use schemars::JsonSchema;
|
||||
use vecdb::{
|
||||
@@ -12,9 +12,9 @@ use vecdb::{
|
||||
};
|
||||
|
||||
use crate::{
|
||||
ComputeIndexes,
|
||||
ComputeIndexes, indexes,
|
||||
internal::{LazyVecsBuilder, Source},
|
||||
indexes, price,
|
||||
price,
|
||||
utils::OptionExt,
|
||||
};
|
||||
|
||||
@@ -54,22 +54,20 @@ where
|
||||
indexes: &indexes::Vecs,
|
||||
options: VecBuilderOptions,
|
||||
) -> Result<Self> {
|
||||
let txindex = source.is_compute().then(|| {
|
||||
Box::new(EagerVec::forced_import(db, name, version + VERSION + Version::ZERO).unwrap())
|
||||
});
|
||||
let txindex = source
|
||||
.is_compute()
|
||||
.then(|| Box::new(EagerVec::forced_import(db, name, version + VERSION).unwrap()));
|
||||
|
||||
let height =
|
||||
EagerVecsBuilder::forced_import(db, name, version + VERSION + Version::ZERO, options)?;
|
||||
let height = EagerVecsBuilder::forced_import(db, name, version + VERSION, options)?;
|
||||
|
||||
let options = options.remove_percentiles();
|
||||
|
||||
let dateindex =
|
||||
EagerVecsBuilder::forced_import(db, name, version + VERSION + Version::ZERO, options)?;
|
||||
let dateindex = EagerVecsBuilder::forced_import(db, name, version + VERSION, options)?;
|
||||
|
||||
Ok(Self {
|
||||
weekindex: LazyVecsBuilder::forced_import(
|
||||
name,
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
None,
|
||||
&dateindex,
|
||||
indexes.time.weekindex_to_weekindex.boxed_clone(),
|
||||
@@ -77,15 +75,18 @@ where
|
||||
),
|
||||
difficultyepoch: LazyVecsBuilder::forced_import(
|
||||
name,
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
None,
|
||||
&height,
|
||||
indexes.block.difficultyepoch_to_difficultyepoch.boxed_clone(),
|
||||
indexes
|
||||
.block
|
||||
.difficultyepoch_to_difficultyepoch
|
||||
.boxed_clone(),
|
||||
options.into(),
|
||||
),
|
||||
monthindex: LazyVecsBuilder::forced_import(
|
||||
name,
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
None,
|
||||
&dateindex,
|
||||
indexes.time.monthindex_to_monthindex.boxed_clone(),
|
||||
@@ -93,7 +94,7 @@ where
|
||||
),
|
||||
quarterindex: LazyVecsBuilder::forced_import(
|
||||
name,
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
None,
|
||||
&dateindex,
|
||||
indexes.time.quarterindex_to_quarterindex.boxed_clone(),
|
||||
@@ -101,7 +102,7 @@ where
|
||||
),
|
||||
semesterindex: LazyVecsBuilder::forced_import(
|
||||
name,
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
None,
|
||||
&dateindex,
|
||||
indexes.time.semesterindex_to_semesterindex.boxed_clone(),
|
||||
@@ -109,7 +110,7 @@ where
|
||||
),
|
||||
yearindex: LazyVecsBuilder::forced_import(
|
||||
name,
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
None,
|
||||
&dateindex,
|
||||
indexes.time.yearindex_to_yearindex.boxed_clone(),
|
||||
@@ -117,7 +118,7 @@ where
|
||||
),
|
||||
decadeindex: LazyVecsBuilder::forced_import(
|
||||
name,
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
None,
|
||||
&dateindex,
|
||||
indexes.time.decadeindex_to_decadeindex.boxed_clone(),
|
||||
@@ -127,7 +128,7 @@ where
|
||||
txindex,
|
||||
height,
|
||||
dateindex,
|
||||
// halvingepoch: StorableVecGeneator::forced_import(db, name, version + VERSION + Version::ZERO, format, options)?,
|
||||
// halvingepoch: StorableVecGeneator::forced_import(db, name, version + VERSION , format, options)?,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -402,8 +403,8 @@ impl<T> Traversable for ComputedVecsFromTxindex<T>
|
||||
where
|
||||
T: ComputedVecValue + JsonSchema,
|
||||
{
|
||||
fn to_tree_node(&self) -> brk_traversable::TreeNode {
|
||||
brk_traversable::TreeNode::Branch(
|
||||
fn to_tree_node(&self) -> TreeNode {
|
||||
TreeNode::Branch(
|
||||
[
|
||||
self.txindex
|
||||
.as_ref()
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
use brk_traversable::Traversable;
|
||||
use brk_types::{
|
||||
DateIndex, DecadeIndex, MonthIndex, QuarterIndex, SemesterIndex, Version, WeekIndex, YearIndex,
|
||||
DateIndex, DecadeIndex, MonthIndex, QuarterIndex, SemesterIndex, TreeNode, Version, WeekIndex,
|
||||
YearIndex,
|
||||
};
|
||||
use schemars::JsonSchema;
|
||||
use vecdb::{AnyExportableVec, BinaryTransform, IterableCloneableVec, LazyVecFrom2};
|
||||
|
||||
use crate::internal::{ComputedVecValue, ComputedVecsFromDateIndex, ComputedVecsFromHeight, LazyTransform2Builder};
|
||||
use crate::internal::{
|
||||
ComputedVecValue, ComputedVecsFromDateIndex, ComputedVecsFromHeight, LazyTransform2Builder,
|
||||
};
|
||||
|
||||
const VERSION: Version = Version::ZERO;
|
||||
|
||||
@@ -215,8 +218,8 @@ where
|
||||
S1T: ComputedVecValue,
|
||||
S2T: ComputedVecValue,
|
||||
{
|
||||
fn to_tree_node(&self) -> brk_traversable::TreeNode {
|
||||
brk_traversable::TreeNode::Branch(
|
||||
fn to_tree_node(&self) -> TreeNode {
|
||||
TreeNode::Branch(
|
||||
[
|
||||
self.dateindex
|
||||
.as_ref()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use brk_traversable::Traversable;
|
||||
use brk_types::{
|
||||
DateIndex, DecadeIndex, DifficultyEpoch, Height, MonthIndex, QuarterIndex, SemesterIndex,
|
||||
Version, WeekIndex, YearIndex,
|
||||
TreeNode, Version, WeekIndex, YearIndex,
|
||||
};
|
||||
use schemars::JsonSchema;
|
||||
use vecdb::{AnyExportableVec, BinaryTransform, IterableBoxedVec, LazyVecFrom2};
|
||||
@@ -192,9 +192,9 @@ where
|
||||
S1T: ComputedVecValue,
|
||||
S2T: ComputedVecValue,
|
||||
{
|
||||
fn to_tree_node(&self) -> brk_traversable::TreeNode {
|
||||
fn to_tree_node(&self) -> TreeNode {
|
||||
let height_extra_node = self.height_extra.to_tree_node();
|
||||
brk_traversable::TreeNode::Branch(
|
||||
TreeNode::Branch(
|
||||
[
|
||||
Some(("height".to_string(), self.height.to_tree_node())),
|
||||
if height_extra_node.is_empty() {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
use brk_traversable::Traversable;
|
||||
use brk_types::{
|
||||
DateIndex, DecadeIndex, MonthIndex, QuarterIndex, SemesterIndex, Version, WeekIndex, YearIndex,
|
||||
DateIndex, DecadeIndex, MonthIndex, QuarterIndex, SemesterIndex, TreeNode, Version, WeekIndex,
|
||||
YearIndex,
|
||||
};
|
||||
use schemars::JsonSchema;
|
||||
use vecdb::{AnyExportableVec, IterableBoxedVec, LazyVecFrom1, UnaryTransform};
|
||||
@@ -65,9 +66,9 @@ where
|
||||
T: ComputedVecValue + JsonSchema,
|
||||
S1T: ComputedVecValue,
|
||||
{
|
||||
fn to_tree_node(&self) -> brk_traversable::TreeNode {
|
||||
fn to_tree_node(&self) -> TreeNode {
|
||||
let dateindex_extra_node = self.dateindex_extra.to_tree_node();
|
||||
brk_traversable::TreeNode::Branch(
|
||||
TreeNode::Branch(
|
||||
[
|
||||
self.dateindex
|
||||
.as_ref()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use brk_traversable::Traversable;
|
||||
use brk_types::{
|
||||
DateIndex, DecadeIndex, DifficultyEpoch, Height, MonthIndex, QuarterIndex, SemesterIndex,
|
||||
Version, WeekIndex, YearIndex,
|
||||
TreeNode, Version, WeekIndex, YearIndex,
|
||||
};
|
||||
use schemars::JsonSchema;
|
||||
use vecdb::{AnyExportableVec, IterableBoxedVec, LazyVecFrom1, UnaryTransform};
|
||||
@@ -72,9 +72,9 @@ where
|
||||
T: ComputedVecValue + JsonSchema,
|
||||
S1T: ComputedVecValue,
|
||||
{
|
||||
fn to_tree_node(&self) -> brk_traversable::TreeNode {
|
||||
fn to_tree_node(&self) -> TreeNode {
|
||||
let height_extra_node = self.height_extra.to_tree_node();
|
||||
brk_traversable::TreeNode::Branch(
|
||||
TreeNode::Branch(
|
||||
[
|
||||
Some(("height".to_string(), self.height.to_tree_node())),
|
||||
if height_extra_node.is_empty() {
|
||||
|
||||
@@ -1,17 +1,19 @@
|
||||
use brk_traversable::Traversable;
|
||||
use brk_types::{
|
||||
DateIndex, DecadeIndex, Height, MonthIndex, QuarterIndex, SemesterIndex, Version, WeekIndex,
|
||||
YearIndex,
|
||||
DateIndex, DecadeIndex, Height, MonthIndex, QuarterIndex, SemesterIndex, TreeNode, Version,
|
||||
WeekIndex, YearIndex,
|
||||
};
|
||||
use schemars::JsonSchema;
|
||||
use serde::Serialize;
|
||||
use vecdb::{Formattable, IterableCloneableVec, LazyVecFrom1, UnaryTransform, VecValue};
|
||||
use vecdb::{
|
||||
AnyExportableVec, Formattable, IterableCloneableVec, LazyVecFrom1, UnaryTransform, VecValue,
|
||||
};
|
||||
|
||||
use crate::indexes;
|
||||
use crate::{indexes, internal::ComputedVecValue};
|
||||
|
||||
/// Lazy constant vecs for all index levels.
|
||||
/// Uses const generic transforms to return the same value for every index.
|
||||
#[derive(Clone, Traversable)]
|
||||
#[derive(Clone)]
|
||||
pub struct ConstantVecs<T>
|
||||
where
|
||||
T: VecValue + Formattable + Serialize + JsonSchema,
|
||||
@@ -83,3 +85,44 @@ impl<T: VecValue + Formattable + Serialize + JsonSchema> ConstantVecs<T> {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Traversable for ConstantVecs<T>
|
||||
where
|
||||
T: ComputedVecValue + JsonSchema,
|
||||
{
|
||||
fn to_tree_node(&self) -> TreeNode {
|
||||
TreeNode::Branch(
|
||||
[
|
||||
Some(("height".to_string(), self.height.to_tree_node())),
|
||||
Some(("dateindex".to_string(), self.dateindex.to_tree_node())),
|
||||
Some(("weekindex".to_string(), self.weekindex.to_tree_node())),
|
||||
Some(("monthindex".to_string(), self.monthindex.to_tree_node())),
|
||||
Some(("quarterindex".to_string(), self.quarterindex.to_tree_node())),
|
||||
Some((
|
||||
"semesterindex".to_string(),
|
||||
self.semesterindex.to_tree_node(),
|
||||
)),
|
||||
Some(("yearindex".to_string(), self.yearindex.to_tree_node())),
|
||||
Some(("decadeindex".to_string(), self.decadeindex.to_tree_node())),
|
||||
]
|
||||
.into_iter()
|
||||
.flatten()
|
||||
.collect(),
|
||||
)
|
||||
.merge_branches()
|
||||
.unwrap()
|
||||
}
|
||||
|
||||
fn iter_any_exportable(&self) -> impl Iterator<Item = &dyn AnyExportableVec> {
|
||||
let mut regular_iter: Box<dyn Iterator<Item = &dyn AnyExportableVec>> =
|
||||
Box::new(self.height.iter_any_exportable());
|
||||
regular_iter = Box::new(regular_iter.chain(self.dateindex.iter_any_exportable()));
|
||||
regular_iter = Box::new(regular_iter.chain(self.weekindex.iter_any_exportable()));
|
||||
regular_iter = Box::new(regular_iter.chain(self.monthindex.iter_any_exportable()));
|
||||
regular_iter = Box::new(regular_iter.chain(self.quarterindex.iter_any_exportable()));
|
||||
regular_iter = Box::new(regular_iter.chain(self.semesterindex.iter_any_exportable()));
|
||||
regular_iter = Box::new(regular_iter.chain(self.yearindex.iter_any_exportable()));
|
||||
regular_iter = Box::new(regular_iter.chain(self.decadeindex.iter_any_exportable()));
|
||||
regular_iter
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,14 +35,14 @@ impl LazyValueVecsFromDateIndex {
|
||||
|
||||
let sats = LazyVecsFromDateIndex::from_computed::<SatsTransform>(
|
||||
name,
|
||||
v + Version::ZERO,
|
||||
v,
|
||||
source.sats.dateindex.as_ref().map(|v| v.boxed_clone()),
|
||||
&source.sats,
|
||||
);
|
||||
|
||||
let bitcoin = LazyVecsFromDateIndex::from_computed::<BitcoinTransform>(
|
||||
&format!("{name}_btc"),
|
||||
v + Version::ZERO,
|
||||
v,
|
||||
source.sats.dateindex.as_ref().map(|v| v.boxed_clone()),
|
||||
&source.sats,
|
||||
);
|
||||
@@ -50,7 +50,7 @@ impl LazyValueVecsFromDateIndex {
|
||||
let dollars = source.dollars.as_ref().map(|dollars_source| {
|
||||
LazyVecsFromDateIndex::from_computed::<DollarsTransform>(
|
||||
&format!("{name}_usd"),
|
||||
v + Version::ZERO,
|
||||
v,
|
||||
dollars_source.dateindex.as_ref().map(|v| v.boxed_clone()),
|
||||
dollars_source,
|
||||
)
|
||||
|
||||
@@ -32,15 +32,11 @@ impl LazyHeightValueVecs {
|
||||
{
|
||||
let v = version + VERSION;
|
||||
|
||||
let sats = LazyVecFrom1::transformed::<SatsTransform>(
|
||||
name,
|
||||
v + Version::ZERO,
|
||||
sats_source.clone(),
|
||||
);
|
||||
let sats = LazyVecFrom1::transformed::<SatsTransform>(name, v, sats_source.clone());
|
||||
|
||||
let bitcoin = LazyVecFrom1::transformed::<BitcoinTransform>(
|
||||
&format!("{name}_btc"),
|
||||
v + Version::ZERO,
|
||||
v,
|
||||
sats_source.clone(),
|
||||
);
|
||||
|
||||
@@ -48,7 +44,7 @@ impl LazyHeightValueVecs {
|
||||
let dollars = price_source.map(|price| {
|
||||
LazyVecFrom2::transformed::<DollarsTransform>(
|
||||
&format!("{name}_usd"),
|
||||
v + Version::ZERO,
|
||||
v,
|
||||
price,
|
||||
sats_source,
|
||||
)
|
||||
|
||||
@@ -27,7 +27,7 @@ impl ComputedHeightValueVecs {
|
||||
) -> Result<Self> {
|
||||
let sats = source
|
||||
.is_compute()
|
||||
.then(|| EagerVec::forced_import(db, name, version + VERSION + Version::ZERO).unwrap());
|
||||
.then(|| EagerVec::forced_import(db, name, version + VERSION).unwrap());
|
||||
|
||||
let sats_source: IterableBoxedVec<Height, Sats> = source
|
||||
.vec()
|
||||
@@ -35,14 +35,14 @@ impl ComputedHeightValueVecs {
|
||||
|
||||
let bitcoin = LazyVecFrom1::transformed::<SatsToBitcoin>(
|
||||
&format!("{name}_btc"),
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
sats_source.clone(),
|
||||
);
|
||||
|
||||
let dollars = price_source.map(|price| {
|
||||
LazyVecFrom2::transformed::<ClosePriceTimesSats>(
|
||||
&format!("{name}_usd"),
|
||||
version + VERSION + Version::ZERO,
|
||||
version + VERSION,
|
||||
price,
|
||||
sats_source.clone(),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user