diff --git a/Cargo.lock b/Cargo.lock index d1e677df2..853c4f974 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2446,9 +2446,9 @@ dependencies = [ [[package]] name = "rawdb" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdd8290a282cf2ea860ee2e787b3229731db7dac73a16c9240c545e20e91b302" +checksum = "39ebb540a243e937d5ec268361bbf7b83e05e6c4ad8de21ac9ee64c4f72e9001" dependencies = [ "libc", "log", @@ -3266,9 +3266,9 @@ checksum = "8f54a172d0620933a27a4360d3db3e2ae0dd6cceae9730751a036bbf182c4b23" [[package]] name = "vecdb" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81910b96a48ea197d1871259164b957c05f3e94d94cd107c4b87cf24e7f2968f" +checksum = "d64486e34d56d63797295aa928288542226b6f28f96a3b58f661b1efd9f54cde" dependencies = [ "ctrlc", "log", @@ -3287,9 +3287,9 @@ dependencies = [ [[package]] name = "vecdb_derive" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ab7250822f3caf8795728690804d39ab5c72c51f5558b90788a79bc99776d55" +checksum = "3c1f863f6687e9ff90962a51a0f6c9646a14dc0ccfd9ea2ea79e288d88187bef" dependencies = [ "quote", "syn", diff --git a/Cargo.toml b/Cargo.toml index 8dba75f3f..1d338c33e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -81,7 +81,7 @@ tokio = { version = "1.49.0", features = ["rt-multi-thread"] } tracing = { version = "0.1", default-features = false, features = ["std"] } tower-http = { version = "0.6.8", features = ["catch-panic", "compression-br", "compression-gzip", "compression-zstd", "cors", "normalize-path", "timeout", "trace"] } tower-layer = "0.3" -vecdb = { version = "0.6.0", features = ["derive", "serde_json", "pco", "schemars"] } +vecdb = { version = "0.6.1", features = ["derive", "serde_json", "pco", "schemars"] } # vecdb = { path = "../anydb/crates/vecdb", features = ["derive", "serde_json", "pco", "schemars"] } [workspace.metadata.release] diff --git a/crates/brk_client/src/lib.rs b/crates/brk_client/src/lib.rs index b8600309e..85bcfb169 100644 --- a/crates/brk_client/src/lib.rs +++ b/crates/brk_client/src/lib.rs @@ -7,12 +7,11 @@ #![allow(clippy::useless_format)] #![allow(clippy::unnecessary_to_owned)] -use std::sync::Arc; -use std::ops::{Bound, RangeBounds}; -use serde::de::DeserializeOwned; pub use brk_cohort::*; pub use brk_types::*; - +use serde::de::DeserializeOwned; +use std::ops::{Bound, RangeBounds}; +use std::sync::Arc; /// Error type for BRK client operations. #[derive(Debug)] @@ -77,7 +76,9 @@ impl BrkClientBase { let response = minreq::get(&url) .with_timeout(self.timeout_secs) .send() - .map_err(|e| BrkError { message: e.to_string() })?; + .map_err(|e| BrkError { + message: e.to_string(), + })?; if response.status_code >= 400 { return Err(BrkError { @@ -90,9 +91,9 @@ impl BrkClientBase { /// Make a GET request and deserialize JSON response. pub fn get_json(&self, path: &str) -> Result { - self.get(path)? - .json() - .map_err(|e| BrkError { message: e.to_string() }) + self.get(path)?.json().map_err(|e| BrkError { + message: e.to_string(), + }) } /// Make a GET request and return raw text response. @@ -100,25 +101,34 @@ impl BrkClientBase { self.get(path)? .as_str() .map(|s| s.to_string()) - .map_err(|e| BrkError { message: e.to_string() }) + .map_err(|e| BrkError { + message: e.to_string(), + }) } } /// Build metric name with suffix. #[inline] fn _m(acc: &str, s: &str) -> String { - if s.is_empty() { acc.to_string() } - else if acc.is_empty() { s.to_string() } - else { format!("{acc}_{s}") } + if s.is_empty() { + acc.to_string() + } else if acc.is_empty() { + s.to_string() + } else { + format!("{acc}_{s}") + } } /// Build metric name with prefix. #[inline] fn _p(prefix: &str, acc: &str) -> String { - if acc.is_empty() { prefix.to_string() } else { format!("{prefix}_{acc}") } + if acc.is_empty() { + prefix.to_string() + } else { + format!("{prefix}_{acc}") + } } - /// Non-generic trait for metric patterns (usable in collections). pub trait AnyMetricPattern { /// Get the metric name. @@ -134,7 +144,6 @@ pub trait MetricPattern: AnyMetricPattern { fn get(&self, index: Index) -> Option>; } - /// Shared endpoint configuration. #[derive(Clone)] struct EndpointConfig { @@ -147,7 +156,13 @@ struct EndpointConfig { impl EndpointConfig { fn new(client: Arc, name: Arc, index: Index) -> Self { - Self { client, name, index, start: None, end: None } + Self { + client, + name, + index, + start: None, + end: None, + } } fn path(&self) -> String { @@ -156,11 +171,21 @@ impl EndpointConfig { fn build_path(&self, format: Option<&str>) -> String { let mut params = Vec::new(); - if let Some(s) = self.start { params.push(format!("start={}", s)); } - if let Some(e) = self.end { params.push(format!("end={}", e)); } - if let Some(fmt) = format { params.push(format!("format={}", fmt)); } + if let Some(s) = self.start { + params.push(format!("start={}", s)); + } + if let Some(e) = self.end { + params.push(format!("end={}", e)); + } + if let Some(fmt) = format { + params.push(format!("format={}", fmt)); + } let p = self.path(); - if params.is_empty() { p } else { format!("{}?{}", p, params.join("&")) } + if params.is_empty() { + p + } else { + format!("{}?{}", p, params.join("&")) + } } fn get_json(&self, format: Option<&str>) -> Result { @@ -206,14 +231,20 @@ pub struct MetricEndpointBuilder { impl MetricEndpointBuilder { pub fn new(client: Arc, name: Arc, index: Index) -> Self { - Self { config: EndpointConfig::new(client, name, index), _marker: std::marker::PhantomData } + Self { + config: EndpointConfig::new(client, name, index), + _marker: std::marker::PhantomData, + } } /// Select a specific index position. pub fn get(mut self, index: usize) -> SingleItemBuilder { self.config.start = Some(index as i64); self.config.end = Some(index as i64 + 1); - SingleItemBuilder { config: self.config, _marker: std::marker::PhantomData } + SingleItemBuilder { + config: self.config, + _marker: std::marker::PhantomData, + } } /// Select a range using Rust range syntax. @@ -235,7 +266,10 @@ impl MetricEndpointBuilder { Bound::Excluded(&n) => Some(n as i64), Bound::Unbounded => None, }; - RangeBuilder { config: self.config, _marker: std::marker::PhantomData } + RangeBuilder { + config: self.config, + _marker: std::marker::PhantomData, + } } /// Take the first n items. @@ -250,13 +284,19 @@ impl MetricEndpointBuilder { } else { self.config.start = Some(-(n as i64)); } - RangeBuilder { config: self.config, _marker: std::marker::PhantomData } + RangeBuilder { + config: self.config, + _marker: std::marker::PhantomData, + } } /// Skip the first n items. Chain with `take(n)` to get a range. pub fn skip(mut self, n: usize) -> SkippedBuilder { self.config.start = Some(n as i64); - SkippedBuilder { config: self.config, _marker: std::marker::PhantomData } + SkippedBuilder { + config: self.config, + _marker: std::marker::PhantomData, + } } /// Fetch all data as parsed JSON. @@ -304,7 +344,10 @@ impl SkippedBuilder { pub fn take(mut self, n: usize) -> RangeBuilder { let start = self.config.start.unwrap_or(0); self.config.end = Some(start + n as i64); - RangeBuilder { config: self.config, _marker: std::marker::PhantomData } + RangeBuilder { + config: self.config, + _marker: std::marker::PhantomData, + } } /// Fetch from the skipped position to the end. @@ -336,12 +379,47 @@ impl RangeBuilder { } } - // Static index arrays -const _I1: &[Index] = &[Index::DateIndex, Index::DecadeIndex, Index::DifficultyEpoch, Index::Height, Index::MonthIndex, Index::QuarterIndex, Index::SemesterIndex, Index::WeekIndex, Index::YearIndex]; -const _I2: &[Index] = &[Index::DateIndex, Index::DecadeIndex, Index::DifficultyEpoch, Index::MonthIndex, Index::QuarterIndex, Index::SemesterIndex, Index::WeekIndex, Index::YearIndex]; -const _I3: &[Index] = &[Index::DateIndex, Index::DecadeIndex, Index::Height, Index::MonthIndex, Index::QuarterIndex, Index::SemesterIndex, Index::WeekIndex, Index::YearIndex]; -const _I4: &[Index] = &[Index::DateIndex, Index::DecadeIndex, Index::MonthIndex, Index::QuarterIndex, Index::SemesterIndex, Index::WeekIndex, Index::YearIndex]; +const _I1: &[Index] = &[ + Index::DateIndex, + Index::DecadeIndex, + Index::DifficultyEpoch, + Index::Height, + Index::MonthIndex, + Index::QuarterIndex, + Index::SemesterIndex, + Index::WeekIndex, + Index::YearIndex, +]; +const _I2: &[Index] = &[ + Index::DateIndex, + Index::DecadeIndex, + Index::DifficultyEpoch, + Index::MonthIndex, + Index::QuarterIndex, + Index::SemesterIndex, + Index::WeekIndex, + Index::YearIndex, +]; +const _I3: &[Index] = &[ + Index::DateIndex, + Index::DecadeIndex, + Index::Height, + Index::MonthIndex, + Index::QuarterIndex, + Index::SemesterIndex, + Index::WeekIndex, + Index::YearIndex, +]; +const _I4: &[Index] = &[ + Index::DateIndex, + Index::DecadeIndex, + Index::MonthIndex, + Index::QuarterIndex, + Index::SemesterIndex, + Index::WeekIndex, + Index::YearIndex, +]; const _I5: &[Index] = &[Index::DateIndex, Index::Height]; const _I6: &[Index] = &[Index::DateIndex]; const _I7: &[Index] = &[Index::DecadeIndex]; @@ -373,502 +451,1653 @@ const _I32: &[Index] = &[Index::EmptyAddressIndex]; const _I33: &[Index] = &[Index::PairOutputIndex]; #[inline] -fn _ep(c: &Arc, n: &Arc, i: Index) -> MetricEndpointBuilder { +fn _ep( + c: &Arc, + n: &Arc, + i: Index, +) -> MetricEndpointBuilder { MetricEndpointBuilder::new(c.clone(), n.clone(), i) } // Index accessor structs -pub struct MetricPattern1By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern1By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern1By { - pub fn dateindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::DateIndex) } - pub fn decadeindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::DecadeIndex) } - pub fn difficultyepoch(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::DifficultyEpoch) } - pub fn height(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::Height) } - pub fn monthindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::MonthIndex) } - pub fn quarterindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::QuarterIndex) } - pub fn semesterindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::SemesterIndex) } - pub fn weekindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::WeekIndex) } - pub fn yearindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::YearIndex) } + pub fn dateindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::DateIndex) + } + pub fn decadeindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::DecadeIndex) + } + pub fn difficultyepoch(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::DifficultyEpoch) + } + pub fn height(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::Height) + } + pub fn monthindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::MonthIndex) + } + pub fn quarterindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::QuarterIndex) + } + pub fn semesterindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::SemesterIndex) + } + pub fn weekindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::WeekIndex) + } + pub fn yearindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::YearIndex) + } } -pub struct MetricPattern1 { name: Arc, pub by: MetricPattern1By } +pub struct MetricPattern1 { + name: Arc, + pub by: MetricPattern1By, +} impl MetricPattern1 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern1By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern1By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern1 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I1 } } -impl MetricPattern for MetricPattern1 { fn get(&self, index: Index) -> Option> { _I1.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern1 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I1 + } +} +impl MetricPattern for MetricPattern1 { + fn get(&self, index: Index) -> Option> { + _I1.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern2By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern2By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern2By { - pub fn dateindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::DateIndex) } - pub fn decadeindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::DecadeIndex) } - pub fn difficultyepoch(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::DifficultyEpoch) } - pub fn monthindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::MonthIndex) } - pub fn quarterindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::QuarterIndex) } - pub fn semesterindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::SemesterIndex) } - pub fn weekindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::WeekIndex) } - pub fn yearindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::YearIndex) } + pub fn dateindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::DateIndex) + } + pub fn decadeindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::DecadeIndex) + } + pub fn difficultyepoch(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::DifficultyEpoch) + } + pub fn monthindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::MonthIndex) + } + pub fn quarterindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::QuarterIndex) + } + pub fn semesterindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::SemesterIndex) + } + pub fn weekindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::WeekIndex) + } + pub fn yearindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::YearIndex) + } } -pub struct MetricPattern2 { name: Arc, pub by: MetricPattern2By } +pub struct MetricPattern2 { + name: Arc, + pub by: MetricPattern2By, +} impl MetricPattern2 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern2By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern2By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern2 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I2 } } -impl MetricPattern for MetricPattern2 { fn get(&self, index: Index) -> Option> { _I2.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern2 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I2 + } +} +impl MetricPattern for MetricPattern2 { + fn get(&self, index: Index) -> Option> { + _I2.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern3By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern3By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern3By { - pub fn dateindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::DateIndex) } - pub fn decadeindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::DecadeIndex) } - pub fn height(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::Height) } - pub fn monthindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::MonthIndex) } - pub fn quarterindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::QuarterIndex) } - pub fn semesterindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::SemesterIndex) } - pub fn weekindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::WeekIndex) } - pub fn yearindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::YearIndex) } + pub fn dateindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::DateIndex) + } + pub fn decadeindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::DecadeIndex) + } + pub fn height(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::Height) + } + pub fn monthindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::MonthIndex) + } + pub fn quarterindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::QuarterIndex) + } + pub fn semesterindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::SemesterIndex) + } + pub fn weekindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::WeekIndex) + } + pub fn yearindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::YearIndex) + } } -pub struct MetricPattern3 { name: Arc, pub by: MetricPattern3By } +pub struct MetricPattern3 { + name: Arc, + pub by: MetricPattern3By, +} impl MetricPattern3 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern3By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern3By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern3 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I3 } } -impl MetricPattern for MetricPattern3 { fn get(&self, index: Index) -> Option> { _I3.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern3 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I3 + } +} +impl MetricPattern for MetricPattern3 { + fn get(&self, index: Index) -> Option> { + _I3.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern4By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern4By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern4By { - pub fn dateindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::DateIndex) } - pub fn decadeindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::DecadeIndex) } - pub fn monthindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::MonthIndex) } - pub fn quarterindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::QuarterIndex) } - pub fn semesterindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::SemesterIndex) } - pub fn weekindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::WeekIndex) } - pub fn yearindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::YearIndex) } + pub fn dateindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::DateIndex) + } + pub fn decadeindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::DecadeIndex) + } + pub fn monthindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::MonthIndex) + } + pub fn quarterindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::QuarterIndex) + } + pub fn semesterindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::SemesterIndex) + } + pub fn weekindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::WeekIndex) + } + pub fn yearindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::YearIndex) + } } -pub struct MetricPattern4 { name: Arc, pub by: MetricPattern4By } +pub struct MetricPattern4 { + name: Arc, + pub by: MetricPattern4By, +} impl MetricPattern4 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern4By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern4By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern4 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I4 } } -impl MetricPattern for MetricPattern4 { fn get(&self, index: Index) -> Option> { _I4.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern4 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I4 + } +} +impl MetricPattern for MetricPattern4 { + fn get(&self, index: Index) -> Option> { + _I4.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern5By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern5By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern5By { - pub fn dateindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::DateIndex) } - pub fn height(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::Height) } + pub fn dateindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::DateIndex) + } + pub fn height(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::Height) + } } -pub struct MetricPattern5 { name: Arc, pub by: MetricPattern5By } +pub struct MetricPattern5 { + name: Arc, + pub by: MetricPattern5By, +} impl MetricPattern5 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern5By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern5By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern5 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I5 } } -impl MetricPattern for MetricPattern5 { fn get(&self, index: Index) -> Option> { _I5.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern5 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I5 + } +} +impl MetricPattern for MetricPattern5 { + fn get(&self, index: Index) -> Option> { + _I5.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern6By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern6By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern6By { - pub fn dateindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::DateIndex) } + pub fn dateindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::DateIndex) + } } -pub struct MetricPattern6 { name: Arc, pub by: MetricPattern6By } +pub struct MetricPattern6 { + name: Arc, + pub by: MetricPattern6By, +} impl MetricPattern6 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern6By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern6By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern6 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I6 } } -impl MetricPattern for MetricPattern6 { fn get(&self, index: Index) -> Option> { _I6.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern6 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I6 + } +} +impl MetricPattern for MetricPattern6 { + fn get(&self, index: Index) -> Option> { + _I6.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern7By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern7By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern7By { - pub fn decadeindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::DecadeIndex) } + pub fn decadeindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::DecadeIndex) + } } -pub struct MetricPattern7 { name: Arc, pub by: MetricPattern7By } +pub struct MetricPattern7 { + name: Arc, + pub by: MetricPattern7By, +} impl MetricPattern7 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern7By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern7By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern7 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I7 } } -impl MetricPattern for MetricPattern7 { fn get(&self, index: Index) -> Option> { _I7.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern7 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I7 + } +} +impl MetricPattern for MetricPattern7 { + fn get(&self, index: Index) -> Option> { + _I7.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern8By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern8By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern8By { - pub fn difficultyepoch(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::DifficultyEpoch) } + pub fn difficultyepoch(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::DifficultyEpoch) + } } -pub struct MetricPattern8 { name: Arc, pub by: MetricPattern8By } +pub struct MetricPattern8 { + name: Arc, + pub by: MetricPattern8By, +} impl MetricPattern8 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern8By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern8By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern8 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I8 } } -impl MetricPattern for MetricPattern8 { fn get(&self, index: Index) -> Option> { _I8.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern8 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I8 + } +} +impl MetricPattern for MetricPattern8 { + fn get(&self, index: Index) -> Option> { + _I8.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern9By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern9By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern9By { - pub fn emptyoutputindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::EmptyOutputIndex) } + pub fn emptyoutputindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::EmptyOutputIndex) + } } -pub struct MetricPattern9 { name: Arc, pub by: MetricPattern9By } +pub struct MetricPattern9 { + name: Arc, + pub by: MetricPattern9By, +} impl MetricPattern9 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern9By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern9By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern9 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I9 } } -impl MetricPattern for MetricPattern9 { fn get(&self, index: Index) -> Option> { _I9.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern9 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I9 + } +} +impl MetricPattern for MetricPattern9 { + fn get(&self, index: Index) -> Option> { + _I9.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern10By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern10By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern10By { - pub fn halvingepoch(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::HalvingEpoch) } + pub fn halvingepoch(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::HalvingEpoch) + } } -pub struct MetricPattern10 { name: Arc, pub by: MetricPattern10By } +pub struct MetricPattern10 { + name: Arc, + pub by: MetricPattern10By, +} impl MetricPattern10 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern10By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern10By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern10 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I10 } } -impl MetricPattern for MetricPattern10 { fn get(&self, index: Index) -> Option> { _I10.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern10 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I10 + } +} +impl MetricPattern for MetricPattern10 { + fn get(&self, index: Index) -> Option> { + _I10.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern11By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern11By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern11By { - pub fn height(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::Height) } + pub fn height(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::Height) + } } -pub struct MetricPattern11 { name: Arc, pub by: MetricPattern11By } +pub struct MetricPattern11 { + name: Arc, + pub by: MetricPattern11By, +} impl MetricPattern11 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern11By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern11By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern11 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I11 } } -impl MetricPattern for MetricPattern11 { fn get(&self, index: Index) -> Option> { _I11.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern11 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I11 + } +} +impl MetricPattern for MetricPattern11 { + fn get(&self, index: Index) -> Option> { + _I11.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern12By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern12By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern12By { - pub fn txinindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::TxInIndex) } + pub fn txinindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::TxInIndex) + } } -pub struct MetricPattern12 { name: Arc, pub by: MetricPattern12By } +pub struct MetricPattern12 { + name: Arc, + pub by: MetricPattern12By, +} impl MetricPattern12 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern12By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern12By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern12 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I12 } } -impl MetricPattern for MetricPattern12 { fn get(&self, index: Index) -> Option> { _I12.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern12 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I12 + } +} +impl MetricPattern for MetricPattern12 { + fn get(&self, index: Index) -> Option> { + _I12.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern13By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern13By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern13By { - pub fn monthindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::MonthIndex) } + pub fn monthindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::MonthIndex) + } } -pub struct MetricPattern13 { name: Arc, pub by: MetricPattern13By } +pub struct MetricPattern13 { + name: Arc, + pub by: MetricPattern13By, +} impl MetricPattern13 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern13By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern13By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern13 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I13 } } -impl MetricPattern for MetricPattern13 { fn get(&self, index: Index) -> Option> { _I13.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern13 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I13 + } +} +impl MetricPattern for MetricPattern13 { + fn get(&self, index: Index) -> Option> { + _I13.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern14By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern14By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern14By { - pub fn opreturnindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::OpReturnIndex) } + pub fn opreturnindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::OpReturnIndex) + } } -pub struct MetricPattern14 { name: Arc, pub by: MetricPattern14By } +pub struct MetricPattern14 { + name: Arc, + pub by: MetricPattern14By, +} impl MetricPattern14 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern14By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern14By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern14 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I14 } } -impl MetricPattern for MetricPattern14 { fn get(&self, index: Index) -> Option> { _I14.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern14 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I14 + } +} +impl MetricPattern for MetricPattern14 { + fn get(&self, index: Index) -> Option> { + _I14.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern15By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern15By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern15By { - pub fn txoutindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::TxOutIndex) } + pub fn txoutindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::TxOutIndex) + } } -pub struct MetricPattern15 { name: Arc, pub by: MetricPattern15By } +pub struct MetricPattern15 { + name: Arc, + pub by: MetricPattern15By, +} impl MetricPattern15 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern15By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern15By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern15 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I15 } } -impl MetricPattern for MetricPattern15 { fn get(&self, index: Index) -> Option> { _I15.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern15 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I15 + } +} +impl MetricPattern for MetricPattern15 { + fn get(&self, index: Index) -> Option> { + _I15.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern16By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern16By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern16By { - pub fn p2aaddressindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::P2AAddressIndex) } + pub fn p2aaddressindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::P2AAddressIndex) + } } -pub struct MetricPattern16 { name: Arc, pub by: MetricPattern16By } +pub struct MetricPattern16 { + name: Arc, + pub by: MetricPattern16By, +} impl MetricPattern16 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern16By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern16By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern16 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I16 } } -impl MetricPattern for MetricPattern16 { fn get(&self, index: Index) -> Option> { _I16.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern16 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I16 + } +} +impl MetricPattern for MetricPattern16 { + fn get(&self, index: Index) -> Option> { + _I16.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern17By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern17By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern17By { - pub fn p2msoutputindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::P2MSOutputIndex) } + pub fn p2msoutputindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::P2MSOutputIndex) + } } -pub struct MetricPattern17 { name: Arc, pub by: MetricPattern17By } +pub struct MetricPattern17 { + name: Arc, + pub by: MetricPattern17By, +} impl MetricPattern17 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern17By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern17By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern17 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I17 } } -impl MetricPattern for MetricPattern17 { fn get(&self, index: Index) -> Option> { _I17.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern17 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I17 + } +} +impl MetricPattern for MetricPattern17 { + fn get(&self, index: Index) -> Option> { + _I17.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern18By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern18By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern18By { - pub fn p2pk33addressindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::P2PK33AddressIndex) } + pub fn p2pk33addressindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::P2PK33AddressIndex) + } } -pub struct MetricPattern18 { name: Arc, pub by: MetricPattern18By } +pub struct MetricPattern18 { + name: Arc, + pub by: MetricPattern18By, +} impl MetricPattern18 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern18By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern18By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern18 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I18 } } -impl MetricPattern for MetricPattern18 { fn get(&self, index: Index) -> Option> { _I18.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern18 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I18 + } +} +impl MetricPattern for MetricPattern18 { + fn get(&self, index: Index) -> Option> { + _I18.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern19By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern19By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern19By { - pub fn p2pk65addressindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::P2PK65AddressIndex) } + pub fn p2pk65addressindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::P2PK65AddressIndex) + } } -pub struct MetricPattern19 { name: Arc, pub by: MetricPattern19By } +pub struct MetricPattern19 { + name: Arc, + pub by: MetricPattern19By, +} impl MetricPattern19 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern19By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern19By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern19 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I19 } } -impl MetricPattern for MetricPattern19 { fn get(&self, index: Index) -> Option> { _I19.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern19 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I19 + } +} +impl MetricPattern for MetricPattern19 { + fn get(&self, index: Index) -> Option> { + _I19.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern20By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern20By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern20By { - pub fn p2pkhaddressindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::P2PKHAddressIndex) } + pub fn p2pkhaddressindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::P2PKHAddressIndex) + } } -pub struct MetricPattern20 { name: Arc, pub by: MetricPattern20By } +pub struct MetricPattern20 { + name: Arc, + pub by: MetricPattern20By, +} impl MetricPattern20 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern20By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern20By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern20 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I20 } } -impl MetricPattern for MetricPattern20 { fn get(&self, index: Index) -> Option> { _I20.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern20 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I20 + } +} +impl MetricPattern for MetricPattern20 { + fn get(&self, index: Index) -> Option> { + _I20.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern21By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern21By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern21By { - pub fn p2shaddressindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::P2SHAddressIndex) } + pub fn p2shaddressindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::P2SHAddressIndex) + } } -pub struct MetricPattern21 { name: Arc, pub by: MetricPattern21By } +pub struct MetricPattern21 { + name: Arc, + pub by: MetricPattern21By, +} impl MetricPattern21 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern21By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern21By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern21 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I21 } } -impl MetricPattern for MetricPattern21 { fn get(&self, index: Index) -> Option> { _I21.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern21 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I21 + } +} +impl MetricPattern for MetricPattern21 { + fn get(&self, index: Index) -> Option> { + _I21.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern22By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern22By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern22By { - pub fn p2traddressindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::P2TRAddressIndex) } + pub fn p2traddressindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::P2TRAddressIndex) + } } -pub struct MetricPattern22 { name: Arc, pub by: MetricPattern22By } +pub struct MetricPattern22 { + name: Arc, + pub by: MetricPattern22By, +} impl MetricPattern22 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern22By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern22By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern22 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I22 } } -impl MetricPattern for MetricPattern22 { fn get(&self, index: Index) -> Option> { _I22.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern22 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I22 + } +} +impl MetricPattern for MetricPattern22 { + fn get(&self, index: Index) -> Option> { + _I22.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern23By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern23By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern23By { - pub fn p2wpkhaddressindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::P2WPKHAddressIndex) } + pub fn p2wpkhaddressindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::P2WPKHAddressIndex) + } } -pub struct MetricPattern23 { name: Arc, pub by: MetricPattern23By } +pub struct MetricPattern23 { + name: Arc, + pub by: MetricPattern23By, +} impl MetricPattern23 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern23By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern23By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern23 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I23 } } -impl MetricPattern for MetricPattern23 { fn get(&self, index: Index) -> Option> { _I23.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern23 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I23 + } +} +impl MetricPattern for MetricPattern23 { + fn get(&self, index: Index) -> Option> { + _I23.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern24By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern24By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern24By { - pub fn p2wshaddressindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::P2WSHAddressIndex) } + pub fn p2wshaddressindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::P2WSHAddressIndex) + } } -pub struct MetricPattern24 { name: Arc, pub by: MetricPattern24By } +pub struct MetricPattern24 { + name: Arc, + pub by: MetricPattern24By, +} impl MetricPattern24 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern24By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern24By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern24 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I24 } } -impl MetricPattern for MetricPattern24 { fn get(&self, index: Index) -> Option> { _I24.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern24 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I24 + } +} +impl MetricPattern for MetricPattern24 { + fn get(&self, index: Index) -> Option> { + _I24.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern25By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern25By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern25By { - pub fn quarterindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::QuarterIndex) } + pub fn quarterindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::QuarterIndex) + } } -pub struct MetricPattern25 { name: Arc, pub by: MetricPattern25By } +pub struct MetricPattern25 { + name: Arc, + pub by: MetricPattern25By, +} impl MetricPattern25 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern25By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern25By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern25 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I25 } } -impl MetricPattern for MetricPattern25 { fn get(&self, index: Index) -> Option> { _I25.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern25 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I25 + } +} +impl MetricPattern for MetricPattern25 { + fn get(&self, index: Index) -> Option> { + _I25.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern26By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern26By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern26By { - pub fn semesterindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::SemesterIndex) } + pub fn semesterindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::SemesterIndex) + } } -pub struct MetricPattern26 { name: Arc, pub by: MetricPattern26By } +pub struct MetricPattern26 { + name: Arc, + pub by: MetricPattern26By, +} impl MetricPattern26 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern26By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern26By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern26 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I26 } } -impl MetricPattern for MetricPattern26 { fn get(&self, index: Index) -> Option> { _I26.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern26 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I26 + } +} +impl MetricPattern for MetricPattern26 { + fn get(&self, index: Index) -> Option> { + _I26.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern27By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern27By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern27By { - pub fn txindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::TxIndex) } + pub fn txindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::TxIndex) + } } -pub struct MetricPattern27 { name: Arc, pub by: MetricPattern27By } +pub struct MetricPattern27 { + name: Arc, + pub by: MetricPattern27By, +} impl MetricPattern27 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern27By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern27By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern27 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I27 } } -impl MetricPattern for MetricPattern27 { fn get(&self, index: Index) -> Option> { _I27.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern27 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I27 + } +} +impl MetricPattern for MetricPattern27 { + fn get(&self, index: Index) -> Option> { + _I27.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern28By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern28By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern28By { - pub fn unknownoutputindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::UnknownOutputIndex) } + pub fn unknownoutputindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::UnknownOutputIndex) + } } -pub struct MetricPattern28 { name: Arc, pub by: MetricPattern28By } +pub struct MetricPattern28 { + name: Arc, + pub by: MetricPattern28By, +} impl MetricPattern28 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern28By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern28By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern28 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I28 } } -impl MetricPattern for MetricPattern28 { fn get(&self, index: Index) -> Option> { _I28.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern28 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I28 + } +} +impl MetricPattern for MetricPattern28 { + fn get(&self, index: Index) -> Option> { + _I28.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern29By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern29By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern29By { - pub fn weekindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::WeekIndex) } + pub fn weekindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::WeekIndex) + } } -pub struct MetricPattern29 { name: Arc, pub by: MetricPattern29By } +pub struct MetricPattern29 { + name: Arc, + pub by: MetricPattern29By, +} impl MetricPattern29 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern29By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern29By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern29 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I29 } } -impl MetricPattern for MetricPattern29 { fn get(&self, index: Index) -> Option> { _I29.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern29 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I29 + } +} +impl MetricPattern for MetricPattern29 { + fn get(&self, index: Index) -> Option> { + _I29.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern30By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern30By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern30By { - pub fn yearindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::YearIndex) } + pub fn yearindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::YearIndex) + } } -pub struct MetricPattern30 { name: Arc, pub by: MetricPattern30By } +pub struct MetricPattern30 { + name: Arc, + pub by: MetricPattern30By, +} impl MetricPattern30 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern30By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern30By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern30 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I30 } } -impl MetricPattern for MetricPattern30 { fn get(&self, index: Index) -> Option> { _I30.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern30 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I30 + } +} +impl MetricPattern for MetricPattern30 { + fn get(&self, index: Index) -> Option> { + _I30.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern31By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern31By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern31By { - pub fn loadedaddressindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::LoadedAddressIndex) } + pub fn loadedaddressindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::LoadedAddressIndex) + } } -pub struct MetricPattern31 { name: Arc, pub by: MetricPattern31By } +pub struct MetricPattern31 { + name: Arc, + pub by: MetricPattern31By, +} impl MetricPattern31 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern31By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern31By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern31 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I31 } } -impl MetricPattern for MetricPattern31 { fn get(&self, index: Index) -> Option> { _I31.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern31 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I31 + } +} +impl MetricPattern for MetricPattern31 { + fn get(&self, index: Index) -> Option> { + _I31.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern32By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern32By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern32By { - pub fn emptyaddressindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::EmptyAddressIndex) } + pub fn emptyaddressindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::EmptyAddressIndex) + } } -pub struct MetricPattern32 { name: Arc, pub by: MetricPattern32By } +pub struct MetricPattern32 { + name: Arc, + pub by: MetricPattern32By, +} impl MetricPattern32 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern32By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern32By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern32 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I32 } } -impl MetricPattern for MetricPattern32 { fn get(&self, index: Index) -> Option> { _I32.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern32 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I32 + } +} +impl MetricPattern for MetricPattern32 { + fn get(&self, index: Index) -> Option> { + _I32.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} -pub struct MetricPattern33By { client: Arc, name: Arc, _marker: std::marker::PhantomData } +pub struct MetricPattern33By { + client: Arc, + name: Arc, + _marker: std::marker::PhantomData, +} impl MetricPattern33By { - pub fn pairoutputindex(&self) -> MetricEndpointBuilder { _ep(&self.client, &self.name, Index::PairOutputIndex) } + pub fn pairoutputindex(&self) -> MetricEndpointBuilder { + _ep(&self.client, &self.name, Index::PairOutputIndex) + } } -pub struct MetricPattern33 { name: Arc, pub by: MetricPattern33By } +pub struct MetricPattern33 { + name: Arc, + pub by: MetricPattern33By, +} impl MetricPattern33 { - pub fn new(client: Arc, name: String) -> Self { let name: Arc = name.into(); Self { name: name.clone(), by: MetricPattern33By { client, name, _marker: std::marker::PhantomData } } } - pub fn name(&self) -> &str { &self.name } + pub fn new(client: Arc, name: String) -> Self { + let name: Arc = name.into(); + Self { + name: name.clone(), + by: MetricPattern33By { + client, + name, + _marker: std::marker::PhantomData, + }, + } + } + pub fn name(&self) -> &str { + &self.name + } } -impl AnyMetricPattern for MetricPattern33 { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I33 } } -impl MetricPattern for MetricPattern33 { fn get(&self, index: Index) -> Option> { _I33.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } } +impl AnyMetricPattern for MetricPattern33 { + fn name(&self) -> &str { + &self.name + } + fn indexes(&self) -> &'static [Index] { + _I33 + } +} +impl MetricPattern for MetricPattern33 { + fn get(&self, index: Index) -> Option> { + _I33.contains(&index) + .then(|| _ep(&self.by.client, &self.by.name, index)) + } +} // Reusable pattern structs @@ -913,31 +2142,88 @@ impl RealizedPattern3 { pub fn new(client: Arc, acc: String) -> Self { Self { adjusted_sopr: MetricPattern6::new(client.clone(), _m(&acc, "adjusted_sopr")), - adjusted_sopr_30d_ema: MetricPattern6::new(client.clone(), _m(&acc, "adjusted_sopr_30d_ema")), - adjusted_sopr_7d_ema: MetricPattern6::new(client.clone(), _m(&acc, "adjusted_sopr_7d_ema")), - adjusted_value_created: MetricPattern1::new(client.clone(), _m(&acc, "adjusted_value_created")), - adjusted_value_destroyed: MetricPattern1::new(client.clone(), _m(&acc, "adjusted_value_destroyed")), + adjusted_sopr_30d_ema: MetricPattern6::new( + client.clone(), + _m(&acc, "adjusted_sopr_30d_ema"), + ), + adjusted_sopr_7d_ema: MetricPattern6::new( + client.clone(), + _m(&acc, "adjusted_sopr_7d_ema"), + ), + adjusted_value_created: MetricPattern1::new( + client.clone(), + _m(&acc, "adjusted_value_created"), + ), + adjusted_value_destroyed: MetricPattern1::new( + client.clone(), + _m(&acc, "adjusted_value_destroyed"), + ), mvrv: MetricPattern4::new(client.clone(), _m(&acc, "mvrv")), neg_realized_loss: BitcoinPattern2::new(client.clone(), _m(&acc, "neg_realized_loss")), net_realized_pnl: BlockCountPattern::new(client.clone(), _m(&acc, "net_realized_pnl")), - net_realized_pnl_cumulative_30d_delta: MetricPattern4::new(client.clone(), _m(&acc, "net_realized_pnl_cumulative_30d_delta")), - net_realized_pnl_cumulative_30d_delta_rel_to_market_cap: MetricPattern4::new(client.clone(), _m(&acc, "net_realized_pnl_cumulative_30d_delta_rel_to_market_cap")), - net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap: MetricPattern4::new(client.clone(), _m(&acc, "net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap")), - net_realized_pnl_rel_to_realized_cap: BlockCountPattern::new(client.clone(), _m(&acc, "net_realized_pnl_rel_to_realized_cap")), + net_realized_pnl_cumulative_30d_delta: MetricPattern4::new( + client.clone(), + _m(&acc, "net_realized_pnl_cumulative_30d_delta"), + ), + net_realized_pnl_cumulative_30d_delta_rel_to_market_cap: MetricPattern4::new( + client.clone(), + _m( + &acc, + "net_realized_pnl_cumulative_30d_delta_rel_to_market_cap", + ), + ), + net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap: MetricPattern4::new( + client.clone(), + _m( + &acc, + "net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap", + ), + ), + net_realized_pnl_rel_to_realized_cap: BlockCountPattern::new( + client.clone(), + _m(&acc, "net_realized_pnl_rel_to_realized_cap"), + ), realized_cap: MetricPattern1::new(client.clone(), _m(&acc, "realized_cap")), - realized_cap_30d_delta: MetricPattern4::new(client.clone(), _m(&acc, "realized_cap_30d_delta")), - realized_cap_rel_to_own_market_cap: MetricPattern1::new(client.clone(), _m(&acc, "realized_cap_rel_to_own_market_cap")), + realized_cap_30d_delta: MetricPattern4::new( + client.clone(), + _m(&acc, "realized_cap_30d_delta"), + ), + realized_cap_rel_to_own_market_cap: MetricPattern1::new( + client.clone(), + _m(&acc, "realized_cap_rel_to_own_market_cap"), + ), realized_loss: BlockCountPattern::new(client.clone(), _m(&acc, "realized_loss")), - realized_loss_rel_to_realized_cap: BlockCountPattern::new(client.clone(), _m(&acc, "realized_loss_rel_to_realized_cap")), + realized_loss_rel_to_realized_cap: BlockCountPattern::new( + client.clone(), + _m(&acc, "realized_loss_rel_to_realized_cap"), + ), realized_price: MetricPattern1::new(client.clone(), _m(&acc, "realized_price")), - realized_price_extra: ActivePriceRatioPattern::new(client.clone(), _m(&acc, "realized_price_ratio")), + realized_price_extra: ActivePriceRatioPattern::new( + client.clone(), + _m(&acc, "realized_price_ratio"), + ), realized_profit: BlockCountPattern::new(client.clone(), _m(&acc, "realized_profit")), - realized_profit_rel_to_realized_cap: BlockCountPattern::new(client.clone(), _m(&acc, "realized_profit_rel_to_realized_cap")), - realized_profit_to_loss_ratio: MetricPattern6::new(client.clone(), _m(&acc, "realized_profit_to_loss_ratio")), + realized_profit_rel_to_realized_cap: BlockCountPattern::new( + client.clone(), + _m(&acc, "realized_profit_rel_to_realized_cap"), + ), + realized_profit_to_loss_ratio: MetricPattern6::new( + client.clone(), + _m(&acc, "realized_profit_to_loss_ratio"), + ), realized_value: MetricPattern1::new(client.clone(), _m(&acc, "realized_value")), - sell_side_risk_ratio: MetricPattern6::new(client.clone(), _m(&acc, "sell_side_risk_ratio")), - sell_side_risk_ratio_30d_ema: MetricPattern6::new(client.clone(), _m(&acc, "sell_side_risk_ratio_30d_ema")), - sell_side_risk_ratio_7d_ema: MetricPattern6::new(client.clone(), _m(&acc, "sell_side_risk_ratio_7d_ema")), + sell_side_risk_ratio: MetricPattern6::new( + client.clone(), + _m(&acc, "sell_side_risk_ratio"), + ), + sell_side_risk_ratio_30d_ema: MetricPattern6::new( + client.clone(), + _m(&acc, "sell_side_risk_ratio_30d_ema"), + ), + sell_side_risk_ratio_7d_ema: MetricPattern6::new( + client.clone(), + _m(&acc, "sell_side_risk_ratio_7d_ema"), + ), sopr: MetricPattern6::new(client.clone(), _m(&acc, "sopr")), sopr_30d_ema: MetricPattern6::new(client.clone(), _m(&acc, "sopr_30d_ema")), sopr_7d_ema: MetricPattern6::new(client.clone(), _m(&acc, "sopr_7d_ema")), @@ -987,29 +2273,80 @@ impl RealizedPattern4 { pub fn new(client: Arc, acc: String) -> Self { Self { adjusted_sopr: MetricPattern6::new(client.clone(), _m(&acc, "adjusted_sopr")), - adjusted_sopr_30d_ema: MetricPattern6::new(client.clone(), _m(&acc, "adjusted_sopr_30d_ema")), - adjusted_sopr_7d_ema: MetricPattern6::new(client.clone(), _m(&acc, "adjusted_sopr_7d_ema")), - adjusted_value_created: MetricPattern1::new(client.clone(), _m(&acc, "adjusted_value_created")), - adjusted_value_destroyed: MetricPattern1::new(client.clone(), _m(&acc, "adjusted_value_destroyed")), + adjusted_sopr_30d_ema: MetricPattern6::new( + client.clone(), + _m(&acc, "adjusted_sopr_30d_ema"), + ), + adjusted_sopr_7d_ema: MetricPattern6::new( + client.clone(), + _m(&acc, "adjusted_sopr_7d_ema"), + ), + adjusted_value_created: MetricPattern1::new( + client.clone(), + _m(&acc, "adjusted_value_created"), + ), + adjusted_value_destroyed: MetricPattern1::new( + client.clone(), + _m(&acc, "adjusted_value_destroyed"), + ), mvrv: MetricPattern4::new(client.clone(), _m(&acc, "mvrv")), neg_realized_loss: BitcoinPattern2::new(client.clone(), _m(&acc, "neg_realized_loss")), net_realized_pnl: BlockCountPattern::new(client.clone(), _m(&acc, "net_realized_pnl")), - net_realized_pnl_cumulative_30d_delta: MetricPattern4::new(client.clone(), _m(&acc, "net_realized_pnl_cumulative_30d_delta")), - net_realized_pnl_cumulative_30d_delta_rel_to_market_cap: MetricPattern4::new(client.clone(), _m(&acc, "net_realized_pnl_cumulative_30d_delta_rel_to_market_cap")), - net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap: MetricPattern4::new(client.clone(), _m(&acc, "net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap")), - net_realized_pnl_rel_to_realized_cap: BlockCountPattern::new(client.clone(), _m(&acc, "net_realized_pnl_rel_to_realized_cap")), + net_realized_pnl_cumulative_30d_delta: MetricPattern4::new( + client.clone(), + _m(&acc, "net_realized_pnl_cumulative_30d_delta"), + ), + net_realized_pnl_cumulative_30d_delta_rel_to_market_cap: MetricPattern4::new( + client.clone(), + _m( + &acc, + "net_realized_pnl_cumulative_30d_delta_rel_to_market_cap", + ), + ), + net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap: MetricPattern4::new( + client.clone(), + _m( + &acc, + "net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap", + ), + ), + net_realized_pnl_rel_to_realized_cap: BlockCountPattern::new( + client.clone(), + _m(&acc, "net_realized_pnl_rel_to_realized_cap"), + ), realized_cap: MetricPattern1::new(client.clone(), _m(&acc, "realized_cap")), - realized_cap_30d_delta: MetricPattern4::new(client.clone(), _m(&acc, "realized_cap_30d_delta")), + realized_cap_30d_delta: MetricPattern4::new( + client.clone(), + _m(&acc, "realized_cap_30d_delta"), + ), realized_loss: BlockCountPattern::new(client.clone(), _m(&acc, "realized_loss")), - realized_loss_rel_to_realized_cap: BlockCountPattern::new(client.clone(), _m(&acc, "realized_loss_rel_to_realized_cap")), + realized_loss_rel_to_realized_cap: BlockCountPattern::new( + client.clone(), + _m(&acc, "realized_loss_rel_to_realized_cap"), + ), realized_price: MetricPattern1::new(client.clone(), _m(&acc, "realized_price")), - realized_price_extra: RealizedPriceExtraPattern::new(client.clone(), _m(&acc, "realized_price_ratio")), + realized_price_extra: RealizedPriceExtraPattern::new( + client.clone(), + _m(&acc, "realized_price_ratio"), + ), realized_profit: BlockCountPattern::new(client.clone(), _m(&acc, "realized_profit")), - realized_profit_rel_to_realized_cap: BlockCountPattern::new(client.clone(), _m(&acc, "realized_profit_rel_to_realized_cap")), + realized_profit_rel_to_realized_cap: BlockCountPattern::new( + client.clone(), + _m(&acc, "realized_profit_rel_to_realized_cap"), + ), realized_value: MetricPattern1::new(client.clone(), _m(&acc, "realized_value")), - sell_side_risk_ratio: MetricPattern6::new(client.clone(), _m(&acc, "sell_side_risk_ratio")), - sell_side_risk_ratio_30d_ema: MetricPattern6::new(client.clone(), _m(&acc, "sell_side_risk_ratio_30d_ema")), - sell_side_risk_ratio_7d_ema: MetricPattern6::new(client.clone(), _m(&acc, "sell_side_risk_ratio_7d_ema")), + sell_side_risk_ratio: MetricPattern6::new( + client.clone(), + _m(&acc, "sell_side_risk_ratio"), + ), + sell_side_risk_ratio_30d_ema: MetricPattern6::new( + client.clone(), + _m(&acc, "sell_side_risk_ratio_30d_ema"), + ), + sell_side_risk_ratio_7d_ema: MetricPattern6::new( + client.clone(), + _m(&acc, "sell_side_risk_ratio_7d_ema"), + ), sopr: MetricPattern6::new(client.clone(), _m(&acc, "sopr")), sopr_30d_ema: MetricPattern6::new(client.clone(), _m(&acc, "sopr_30d_ema")), sopr_7d_ema: MetricPattern6::new(client.clone(), _m(&acc, "sopr_7d_ema")), @@ -1126,24 +2463,69 @@ impl RealizedPattern2 { mvrv: MetricPattern4::new(client.clone(), _m(&acc, "mvrv")), neg_realized_loss: BitcoinPattern2::new(client.clone(), _m(&acc, "neg_realized_loss")), net_realized_pnl: BlockCountPattern::new(client.clone(), _m(&acc, "net_realized_pnl")), - net_realized_pnl_cumulative_30d_delta: MetricPattern4::new(client.clone(), _m(&acc, "net_realized_pnl_cumulative_30d_delta")), - net_realized_pnl_cumulative_30d_delta_rel_to_market_cap: MetricPattern4::new(client.clone(), _m(&acc, "net_realized_pnl_cumulative_30d_delta_rel_to_market_cap")), - net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap: MetricPattern4::new(client.clone(), _m(&acc, "net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap")), - net_realized_pnl_rel_to_realized_cap: BlockCountPattern::new(client.clone(), _m(&acc, "net_realized_pnl_rel_to_realized_cap")), + net_realized_pnl_cumulative_30d_delta: MetricPattern4::new( + client.clone(), + _m(&acc, "net_realized_pnl_cumulative_30d_delta"), + ), + net_realized_pnl_cumulative_30d_delta_rel_to_market_cap: MetricPattern4::new( + client.clone(), + _m( + &acc, + "net_realized_pnl_cumulative_30d_delta_rel_to_market_cap", + ), + ), + net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap: MetricPattern4::new( + client.clone(), + _m( + &acc, + "net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap", + ), + ), + net_realized_pnl_rel_to_realized_cap: BlockCountPattern::new( + client.clone(), + _m(&acc, "net_realized_pnl_rel_to_realized_cap"), + ), realized_cap: MetricPattern1::new(client.clone(), _m(&acc, "realized_cap")), - realized_cap_30d_delta: MetricPattern4::new(client.clone(), _m(&acc, "realized_cap_30d_delta")), - realized_cap_rel_to_own_market_cap: MetricPattern1::new(client.clone(), _m(&acc, "realized_cap_rel_to_own_market_cap")), + realized_cap_30d_delta: MetricPattern4::new( + client.clone(), + _m(&acc, "realized_cap_30d_delta"), + ), + realized_cap_rel_to_own_market_cap: MetricPattern1::new( + client.clone(), + _m(&acc, "realized_cap_rel_to_own_market_cap"), + ), realized_loss: BlockCountPattern::new(client.clone(), _m(&acc, "realized_loss")), - realized_loss_rel_to_realized_cap: BlockCountPattern::new(client.clone(), _m(&acc, "realized_loss_rel_to_realized_cap")), + realized_loss_rel_to_realized_cap: BlockCountPattern::new( + client.clone(), + _m(&acc, "realized_loss_rel_to_realized_cap"), + ), realized_price: MetricPattern1::new(client.clone(), _m(&acc, "realized_price")), - realized_price_extra: ActivePriceRatioPattern::new(client.clone(), _m(&acc, "realized_price_ratio")), + realized_price_extra: ActivePriceRatioPattern::new( + client.clone(), + _m(&acc, "realized_price_ratio"), + ), realized_profit: BlockCountPattern::new(client.clone(), _m(&acc, "realized_profit")), - realized_profit_rel_to_realized_cap: BlockCountPattern::new(client.clone(), _m(&acc, "realized_profit_rel_to_realized_cap")), - realized_profit_to_loss_ratio: MetricPattern6::new(client.clone(), _m(&acc, "realized_profit_to_loss_ratio")), + realized_profit_rel_to_realized_cap: BlockCountPattern::new( + client.clone(), + _m(&acc, "realized_profit_rel_to_realized_cap"), + ), + realized_profit_to_loss_ratio: MetricPattern6::new( + client.clone(), + _m(&acc, "realized_profit_to_loss_ratio"), + ), realized_value: MetricPattern1::new(client.clone(), _m(&acc, "realized_value")), - sell_side_risk_ratio: MetricPattern6::new(client.clone(), _m(&acc, "sell_side_risk_ratio")), - sell_side_risk_ratio_30d_ema: MetricPattern6::new(client.clone(), _m(&acc, "sell_side_risk_ratio_30d_ema")), - sell_side_risk_ratio_7d_ema: MetricPattern6::new(client.clone(), _m(&acc, "sell_side_risk_ratio_7d_ema")), + sell_side_risk_ratio: MetricPattern6::new( + client.clone(), + _m(&acc, "sell_side_risk_ratio"), + ), + sell_side_risk_ratio_30d_ema: MetricPattern6::new( + client.clone(), + _m(&acc, "sell_side_risk_ratio_30d_ema"), + ), + sell_side_risk_ratio_7d_ema: MetricPattern6::new( + client.clone(), + _m(&acc, "sell_side_risk_ratio_7d_ema"), + ), sopr: MetricPattern6::new(client.clone(), _m(&acc, "sopr")), sopr_30d_ema: MetricPattern6::new(client.clone(), _m(&acc, "sopr_30d_ema")), sopr_7d_ema: MetricPattern6::new(client.clone(), _m(&acc, "sopr_7d_ema")), @@ -1190,22 +2572,61 @@ impl RealizedPattern { mvrv: MetricPattern4::new(client.clone(), _m(&acc, "mvrv")), neg_realized_loss: BitcoinPattern2::new(client.clone(), _m(&acc, "neg_realized_loss")), net_realized_pnl: BlockCountPattern::new(client.clone(), _m(&acc, "net_realized_pnl")), - net_realized_pnl_cumulative_30d_delta: MetricPattern4::new(client.clone(), _m(&acc, "net_realized_pnl_cumulative_30d_delta")), - net_realized_pnl_cumulative_30d_delta_rel_to_market_cap: MetricPattern4::new(client.clone(), _m(&acc, "net_realized_pnl_cumulative_30d_delta_rel_to_market_cap")), - net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap: MetricPattern4::new(client.clone(), _m(&acc, "net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap")), - net_realized_pnl_rel_to_realized_cap: BlockCountPattern::new(client.clone(), _m(&acc, "net_realized_pnl_rel_to_realized_cap")), + net_realized_pnl_cumulative_30d_delta: MetricPattern4::new( + client.clone(), + _m(&acc, "net_realized_pnl_cumulative_30d_delta"), + ), + net_realized_pnl_cumulative_30d_delta_rel_to_market_cap: MetricPattern4::new( + client.clone(), + _m( + &acc, + "net_realized_pnl_cumulative_30d_delta_rel_to_market_cap", + ), + ), + net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap: MetricPattern4::new( + client.clone(), + _m( + &acc, + "net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap", + ), + ), + net_realized_pnl_rel_to_realized_cap: BlockCountPattern::new( + client.clone(), + _m(&acc, "net_realized_pnl_rel_to_realized_cap"), + ), realized_cap: MetricPattern1::new(client.clone(), _m(&acc, "realized_cap")), - realized_cap_30d_delta: MetricPattern4::new(client.clone(), _m(&acc, "realized_cap_30d_delta")), + realized_cap_30d_delta: MetricPattern4::new( + client.clone(), + _m(&acc, "realized_cap_30d_delta"), + ), realized_loss: BlockCountPattern::new(client.clone(), _m(&acc, "realized_loss")), - realized_loss_rel_to_realized_cap: BlockCountPattern::new(client.clone(), _m(&acc, "realized_loss_rel_to_realized_cap")), + realized_loss_rel_to_realized_cap: BlockCountPattern::new( + client.clone(), + _m(&acc, "realized_loss_rel_to_realized_cap"), + ), realized_price: MetricPattern1::new(client.clone(), _m(&acc, "realized_price")), - realized_price_extra: RealizedPriceExtraPattern::new(client.clone(), _m(&acc, "realized_price_ratio")), + realized_price_extra: RealizedPriceExtraPattern::new( + client.clone(), + _m(&acc, "realized_price_ratio"), + ), realized_profit: BlockCountPattern::new(client.clone(), _m(&acc, "realized_profit")), - realized_profit_rel_to_realized_cap: BlockCountPattern::new(client.clone(), _m(&acc, "realized_profit_rel_to_realized_cap")), + realized_profit_rel_to_realized_cap: BlockCountPattern::new( + client.clone(), + _m(&acc, "realized_profit_rel_to_realized_cap"), + ), realized_value: MetricPattern1::new(client.clone(), _m(&acc, "realized_value")), - sell_side_risk_ratio: MetricPattern6::new(client.clone(), _m(&acc, "sell_side_risk_ratio")), - sell_side_risk_ratio_30d_ema: MetricPattern6::new(client.clone(), _m(&acc, "sell_side_risk_ratio_30d_ema")), - sell_side_risk_ratio_7d_ema: MetricPattern6::new(client.clone(), _m(&acc, "sell_side_risk_ratio_7d_ema")), + sell_side_risk_ratio: MetricPattern6::new( + client.clone(), + _m(&acc, "sell_side_risk_ratio"), + ), + sell_side_risk_ratio_30d_ema: MetricPattern6::new( + client.clone(), + _m(&acc, "sell_side_risk_ratio_30d_ema"), + ), + sell_side_risk_ratio_7d_ema: MetricPattern6::new( + client.clone(), + _m(&acc, "sell_side_risk_ratio_7d_ema"), + ), sopr: MetricPattern6::new(client.clone(), _m(&acc, "sopr")), sopr_30d_ema: MetricPattern6::new(client.clone(), _m(&acc, "sopr_30d_ema")), sopr_7d_ema: MetricPattern6::new(client.clone(), _m(&acc, "sopr_7d_ema")), @@ -1394,24 +2815,75 @@ impl RelativePattern5 { /// Create a new pattern node with accumulated metric name. pub fn new(client: Arc, acc: String) -> Self { Self { - neg_unrealized_loss_rel_to_market_cap: MetricPattern1::new(client.clone(), _m(&acc, "neg_unrealized_loss_rel_to_market_cap")), - neg_unrealized_loss_rel_to_own_market_cap: MetricPattern1::new(client.clone(), _m(&acc, "neg_unrealized_loss_rel_to_own_market_cap")), - neg_unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1::new(client.clone(), _m(&acc, "neg_unrealized_loss_rel_to_own_total_unrealized_pnl")), - net_unrealized_pnl_rel_to_market_cap: MetricPattern1::new(client.clone(), _m(&acc, "net_unrealized_pnl_rel_to_market_cap")), - net_unrealized_pnl_rel_to_own_market_cap: MetricPattern1::new(client.clone(), _m(&acc, "net_unrealized_pnl_rel_to_own_market_cap")), - net_unrealized_pnl_rel_to_own_total_unrealized_pnl: MetricPattern1::new(client.clone(), _m(&acc, "net_unrealized_pnl_rel_to_own_total_unrealized_pnl")), + neg_unrealized_loss_rel_to_market_cap: MetricPattern1::new( + client.clone(), + _m(&acc, "neg_unrealized_loss_rel_to_market_cap"), + ), + neg_unrealized_loss_rel_to_own_market_cap: MetricPattern1::new( + client.clone(), + _m(&acc, "neg_unrealized_loss_rel_to_own_market_cap"), + ), + neg_unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1::new( + client.clone(), + _m(&acc, "neg_unrealized_loss_rel_to_own_total_unrealized_pnl"), + ), + net_unrealized_pnl_rel_to_market_cap: MetricPattern1::new( + client.clone(), + _m(&acc, "net_unrealized_pnl_rel_to_market_cap"), + ), + net_unrealized_pnl_rel_to_own_market_cap: MetricPattern1::new( + client.clone(), + _m(&acc, "net_unrealized_pnl_rel_to_own_market_cap"), + ), + net_unrealized_pnl_rel_to_own_total_unrealized_pnl: MetricPattern1::new( + client.clone(), + _m(&acc, "net_unrealized_pnl_rel_to_own_total_unrealized_pnl"), + ), nupl: MetricPattern1::new(client.clone(), _m(&acc, "nupl")), - supply_in_loss_rel_to_circulating_supply: MetricPattern1::new(client.clone(), _m(&acc, "supply_in_loss_rel_to_circulating_supply")), - supply_in_loss_rel_to_own_supply: MetricPattern1::new(client.clone(), _m(&acc, "supply_in_loss_rel_to_own_supply")), - supply_in_profit_rel_to_circulating_supply: MetricPattern1::new(client.clone(), _m(&acc, "supply_in_profit_rel_to_circulating_supply")), - supply_in_profit_rel_to_own_supply: MetricPattern1::new(client.clone(), _m(&acc, "supply_in_profit_rel_to_own_supply")), - supply_rel_to_circulating_supply: MetricPattern4::new(client.clone(), _m(&acc, "supply_rel_to_circulating_supply")), - unrealized_loss_rel_to_market_cap: MetricPattern1::new(client.clone(), _m(&acc, "unrealized_loss_rel_to_market_cap")), - unrealized_loss_rel_to_own_market_cap: MetricPattern1::new(client.clone(), _m(&acc, "unrealized_loss_rel_to_own_market_cap")), - unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1::new(client.clone(), _m(&acc, "unrealized_loss_rel_to_own_total_unrealized_pnl")), - unrealized_profit_rel_to_market_cap: MetricPattern1::new(client.clone(), _m(&acc, "unrealized_profit_rel_to_market_cap")), - unrealized_profit_rel_to_own_market_cap: MetricPattern1::new(client.clone(), _m(&acc, "unrealized_profit_rel_to_own_market_cap")), - unrealized_profit_rel_to_own_total_unrealized_pnl: MetricPattern1::new(client.clone(), _m(&acc, "unrealized_profit_rel_to_own_total_unrealized_pnl")), + supply_in_loss_rel_to_circulating_supply: MetricPattern1::new( + client.clone(), + _m(&acc, "supply_in_loss_rel_to_circulating_supply"), + ), + supply_in_loss_rel_to_own_supply: MetricPattern1::new( + client.clone(), + _m(&acc, "supply_in_loss_rel_to_own_supply"), + ), + supply_in_profit_rel_to_circulating_supply: MetricPattern1::new( + client.clone(), + _m(&acc, "supply_in_profit_rel_to_circulating_supply"), + ), + supply_in_profit_rel_to_own_supply: MetricPattern1::new( + client.clone(), + _m(&acc, "supply_in_profit_rel_to_own_supply"), + ), + supply_rel_to_circulating_supply: MetricPattern4::new( + client.clone(), + _m(&acc, "supply_rel_to_circulating_supply"), + ), + unrealized_loss_rel_to_market_cap: MetricPattern1::new( + client.clone(), + _m(&acc, "unrealized_loss_rel_to_market_cap"), + ), + unrealized_loss_rel_to_own_market_cap: MetricPattern1::new( + client.clone(), + _m(&acc, "unrealized_loss_rel_to_own_market_cap"), + ), + unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1::new( + client.clone(), + _m(&acc, "unrealized_loss_rel_to_own_total_unrealized_pnl"), + ), + unrealized_profit_rel_to_market_cap: MetricPattern1::new( + client.clone(), + _m(&acc, "unrealized_profit_rel_to_market_cap"), + ), + unrealized_profit_rel_to_own_market_cap: MetricPattern1::new( + client.clone(), + _m(&acc, "unrealized_profit_rel_to_own_market_cap"), + ), + unrealized_profit_rel_to_own_total_unrealized_pnl: MetricPattern1::new( + client.clone(), + _m(&acc, "unrealized_profit_rel_to_own_total_unrealized_pnl"), + ), } } } @@ -1619,17 +3091,17 @@ impl ClassAveragePricePattern { /// Create a new pattern node with accumulated metric name. pub fn new(client: Arc, acc: String) -> Self { Self { - _2015: MetricPattern4::new(client.clone(), _m(&acc, "2015_returns")), - _2016: MetricPattern4::new(client.clone(), _m(&acc, "2016_returns")), - _2017: MetricPattern4::new(client.clone(), _m(&acc, "2017_returns")), - _2018: MetricPattern4::new(client.clone(), _m(&acc, "2018_returns")), - _2019: MetricPattern4::new(client.clone(), _m(&acc, "2019_returns")), - _2020: MetricPattern4::new(client.clone(), _m(&acc, "2020_returns")), - _2021: MetricPattern4::new(client.clone(), _m(&acc, "2021_returns")), - _2022: MetricPattern4::new(client.clone(), _m(&acc, "2022_returns")), - _2023: MetricPattern4::new(client.clone(), _m(&acc, "2023_returns")), - _2024: MetricPattern4::new(client.clone(), _m(&acc, "2024_returns")), - _2025: MetricPattern4::new(client.clone(), _m(&acc, "2025_returns")), + _2015: MetricPattern4::new(client.clone(), _m(&acc, "2015_average_price")), + _2016: MetricPattern4::new(client.clone(), _m(&acc, "2016_average_price")), + _2017: MetricPattern4::new(client.clone(), _m(&acc, "2017_average_price")), + _2018: MetricPattern4::new(client.clone(), _m(&acc, "2018_average_price")), + _2019: MetricPattern4::new(client.clone(), _m(&acc, "2019_average_price")), + _2020: MetricPattern4::new(client.clone(), _m(&acc, "2020_average_price")), + _2021: MetricPattern4::new(client.clone(), _m(&acc, "2021_average_price")), + _2022: MetricPattern4::new(client.clone(), _m(&acc, "2022_average_price")), + _2023: MetricPattern4::new(client.clone(), _m(&acc, "2023_average_price")), + _2024: MetricPattern4::new(client.clone(), _m(&acc, "2024_average_price")), + _2025: MetricPattern4::new(client.clone(), _m(&acc, "2025_average_price")), } } } @@ -1668,38 +3140,6 @@ impl DollarsPattern { } } -/// Pattern struct for repeated tree structure. -pub struct RelativePattern2 { - pub neg_unrealized_loss_rel_to_own_market_cap: MetricPattern1, - pub neg_unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1, - pub net_unrealized_pnl_rel_to_own_market_cap: MetricPattern1, - pub net_unrealized_pnl_rel_to_own_total_unrealized_pnl: MetricPattern1, - pub supply_in_loss_rel_to_own_supply: MetricPattern1, - pub supply_in_profit_rel_to_own_supply: MetricPattern1, - pub unrealized_loss_rel_to_own_market_cap: MetricPattern1, - pub unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1, - pub unrealized_profit_rel_to_own_market_cap: MetricPattern1, - pub unrealized_profit_rel_to_own_total_unrealized_pnl: MetricPattern1, -} - -impl RelativePattern2 { - /// Create a new pattern node with accumulated metric name. - pub fn new(client: Arc, acc: String) -> Self { - Self { - neg_unrealized_loss_rel_to_own_market_cap: MetricPattern1::new(client.clone(), _m(&acc, "neg_unrealized_loss_rel_to_own_market_cap")), - neg_unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1::new(client.clone(), _m(&acc, "neg_unrealized_loss_rel_to_own_total_unrealized_pnl")), - net_unrealized_pnl_rel_to_own_market_cap: MetricPattern1::new(client.clone(), _m(&acc, "net_unrealized_pnl_rel_to_own_market_cap")), - net_unrealized_pnl_rel_to_own_total_unrealized_pnl: MetricPattern1::new(client.clone(), _m(&acc, "net_unrealized_pnl_rel_to_own_total_unrealized_pnl")), - supply_in_loss_rel_to_own_supply: MetricPattern1::new(client.clone(), _m(&acc, "supply_in_loss_rel_to_own_supply")), - supply_in_profit_rel_to_own_supply: MetricPattern1::new(client.clone(), _m(&acc, "supply_in_profit_rel_to_own_supply")), - unrealized_loss_rel_to_own_market_cap: MetricPattern1::new(client.clone(), _m(&acc, "unrealized_loss_rel_to_own_market_cap")), - unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1::new(client.clone(), _m(&acc, "unrealized_loss_rel_to_own_total_unrealized_pnl")), - unrealized_profit_rel_to_own_market_cap: MetricPattern1::new(client.clone(), _m(&acc, "unrealized_profit_rel_to_own_market_cap")), - unrealized_profit_rel_to_own_total_unrealized_pnl: MetricPattern1::new(client.clone(), _m(&acc, "unrealized_profit_rel_to_own_total_unrealized_pnl")), - } - } -} - /// Pattern struct for repeated tree structure. pub struct RelativePattern { pub neg_unrealized_loss_rel_to_market_cap: MetricPattern1, @@ -1718,16 +3158,105 @@ impl RelativePattern { /// Create a new pattern node with accumulated metric name. pub fn new(client: Arc, acc: String) -> Self { Self { - neg_unrealized_loss_rel_to_market_cap: MetricPattern1::new(client.clone(), _m(&acc, "neg_unrealized_loss_rel_to_market_cap")), - net_unrealized_pnl_rel_to_market_cap: MetricPattern1::new(client.clone(), _m(&acc, "net_unrealized_pnl_rel_to_market_cap")), + neg_unrealized_loss_rel_to_market_cap: MetricPattern1::new( + client.clone(), + _m(&acc, "neg_unrealized_loss_rel_to_market_cap"), + ), + net_unrealized_pnl_rel_to_market_cap: MetricPattern1::new( + client.clone(), + _m(&acc, "net_unrealized_pnl_rel_to_market_cap"), + ), nupl: MetricPattern1::new(client.clone(), _m(&acc, "nupl")), - supply_in_loss_rel_to_circulating_supply: MetricPattern1::new(client.clone(), _m(&acc, "supply_in_loss_rel_to_circulating_supply")), - supply_in_loss_rel_to_own_supply: MetricPattern1::new(client.clone(), _m(&acc, "supply_in_loss_rel_to_own_supply")), - supply_in_profit_rel_to_circulating_supply: MetricPattern1::new(client.clone(), _m(&acc, "supply_in_profit_rel_to_circulating_supply")), - supply_in_profit_rel_to_own_supply: MetricPattern1::new(client.clone(), _m(&acc, "supply_in_profit_rel_to_own_supply")), - supply_rel_to_circulating_supply: MetricPattern4::new(client.clone(), _m(&acc, "supply_rel_to_circulating_supply")), - unrealized_loss_rel_to_market_cap: MetricPattern1::new(client.clone(), _m(&acc, "unrealized_loss_rel_to_market_cap")), - unrealized_profit_rel_to_market_cap: MetricPattern1::new(client.clone(), _m(&acc, "unrealized_profit_rel_to_market_cap")), + supply_in_loss_rel_to_circulating_supply: MetricPattern1::new( + client.clone(), + _m(&acc, "supply_in_loss_rel_to_circulating_supply"), + ), + supply_in_loss_rel_to_own_supply: MetricPattern1::new( + client.clone(), + _m(&acc, "supply_in_loss_rel_to_own_supply"), + ), + supply_in_profit_rel_to_circulating_supply: MetricPattern1::new( + client.clone(), + _m(&acc, "supply_in_profit_rel_to_circulating_supply"), + ), + supply_in_profit_rel_to_own_supply: MetricPattern1::new( + client.clone(), + _m(&acc, "supply_in_profit_rel_to_own_supply"), + ), + supply_rel_to_circulating_supply: MetricPattern4::new( + client.clone(), + _m(&acc, "supply_rel_to_circulating_supply"), + ), + unrealized_loss_rel_to_market_cap: MetricPattern1::new( + client.clone(), + _m(&acc, "unrealized_loss_rel_to_market_cap"), + ), + unrealized_profit_rel_to_market_cap: MetricPattern1::new( + client.clone(), + _m(&acc, "unrealized_profit_rel_to_market_cap"), + ), + } + } +} + +/// Pattern struct for repeated tree structure. +pub struct RelativePattern2 { + pub neg_unrealized_loss_rel_to_own_market_cap: MetricPattern1, + pub neg_unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1, + pub net_unrealized_pnl_rel_to_own_market_cap: MetricPattern1, + pub net_unrealized_pnl_rel_to_own_total_unrealized_pnl: MetricPattern1, + pub supply_in_loss_rel_to_own_supply: MetricPattern1, + pub supply_in_profit_rel_to_own_supply: MetricPattern1, + pub unrealized_loss_rel_to_own_market_cap: MetricPattern1, + pub unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1, + pub unrealized_profit_rel_to_own_market_cap: MetricPattern1, + pub unrealized_profit_rel_to_own_total_unrealized_pnl: MetricPattern1, +} + +impl RelativePattern2 { + /// Create a new pattern node with accumulated metric name. + pub fn new(client: Arc, acc: String) -> Self { + Self { + neg_unrealized_loss_rel_to_own_market_cap: MetricPattern1::new( + client.clone(), + _m(&acc, "neg_unrealized_loss_rel_to_own_market_cap"), + ), + neg_unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1::new( + client.clone(), + _m(&acc, "neg_unrealized_loss_rel_to_own_total_unrealized_pnl"), + ), + net_unrealized_pnl_rel_to_own_market_cap: MetricPattern1::new( + client.clone(), + _m(&acc, "net_unrealized_pnl_rel_to_own_market_cap"), + ), + net_unrealized_pnl_rel_to_own_total_unrealized_pnl: MetricPattern1::new( + client.clone(), + _m(&acc, "net_unrealized_pnl_rel_to_own_total_unrealized_pnl"), + ), + supply_in_loss_rel_to_own_supply: MetricPattern1::new( + client.clone(), + _m(&acc, "supply_in_loss_rel_to_own_supply"), + ), + supply_in_profit_rel_to_own_supply: MetricPattern1::new( + client.clone(), + _m(&acc, "supply_in_profit_rel_to_own_supply"), + ), + unrealized_loss_rel_to_own_market_cap: MetricPattern1::new( + client.clone(), + _m(&acc, "unrealized_loss_rel_to_own_market_cap"), + ), + unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1::new( + client.clone(), + _m(&acc, "unrealized_loss_rel_to_own_total_unrealized_pnl"), + ), + unrealized_profit_rel_to_own_market_cap: MetricPattern1::new( + client.clone(), + _m(&acc, "unrealized_profit_rel_to_own_market_cap"), + ), + unrealized_profit_rel_to_own_total_unrealized_pnl: MetricPattern1::new( + client.clone(), + _m(&acc, "unrealized_profit_rel_to_own_total_unrealized_pnl"), + ), } } } @@ -1936,6 +3465,41 @@ impl _10yTo12yPattern { } } +/// Pattern struct for repeated tree structure. +pub struct UnrealizedPattern { + pub neg_unrealized_loss: MetricPattern1, + pub net_unrealized_pnl: MetricPattern1, + pub supply_in_loss: ActiveSupplyPattern, + pub supply_in_profit: ActiveSupplyPattern, + pub total_unrealized_pnl: MetricPattern1, + pub unrealized_loss: MetricPattern1, + pub unrealized_profit: MetricPattern1, +} + +impl UnrealizedPattern { + /// Create a new pattern node with accumulated metric name. + pub fn new(client: Arc, acc: String) -> Self { + Self { + neg_unrealized_loss: MetricPattern1::new( + client.clone(), + _m(&acc, "neg_unrealized_loss"), + ), + net_unrealized_pnl: MetricPattern1::new(client.clone(), _m(&acc, "net_unrealized_pnl")), + supply_in_loss: ActiveSupplyPattern::new(client.clone(), _m(&acc, "supply_in_loss")), + supply_in_profit: ActiveSupplyPattern::new( + client.clone(), + _m(&acc, "supply_in_profit"), + ), + total_unrealized_pnl: MetricPattern1::new( + client.clone(), + _m(&acc, "total_unrealized_pnl"), + ), + unrealized_loss: MetricPattern1::new(client.clone(), _m(&acc, "unrealized_loss")), + unrealized_profit: MetricPattern1::new(client.clone(), _m(&acc, "unrealized_profit")), + } + } +} + /// Pattern struct for repeated tree structure. pub struct _10yPattern { pub activity: ActivityPattern2, @@ -1962,32 +3526,6 @@ impl _10yPattern { } } -/// Pattern struct for repeated tree structure. -pub struct _0satsPattern2 { - pub activity: ActivityPattern2, - pub cost_basis: CostBasisPattern, - pub outputs: OutputsPattern, - pub realized: RealizedPattern, - pub relative: RelativePattern4, - pub supply: SupplyPattern2, - pub unrealized: UnrealizedPattern, -} - -impl _0satsPattern2 { - /// Create a new pattern node with accumulated metric name. - pub fn new(client: Arc, acc: String) -> Self { - Self { - activity: ActivityPattern2::new(client.clone(), acc.clone()), - cost_basis: CostBasisPattern::new(client.clone(), acc.clone()), - outputs: OutputsPattern::new(client.clone(), _m(&acc, "utxo_count")), - realized: RealizedPattern::new(client.clone(), acc.clone()), - relative: RelativePattern4::new(client.clone(), _m(&acc, "supply_in")), - supply: SupplyPattern2::new(client.clone(), _m(&acc, "supply")), - unrealized: UnrealizedPattern::new(client.clone(), acc.clone()), - } - } -} - /// Pattern struct for repeated tree structure. pub struct _100btcPattern { pub activity: ActivityPattern2, @@ -2014,32 +3552,6 @@ impl _100btcPattern { } } -/// Pattern struct for repeated tree structure. -pub struct UnrealizedPattern { - pub neg_unrealized_loss: MetricPattern1, - pub net_unrealized_pnl: MetricPattern1, - pub supply_in_loss: ActiveSupplyPattern, - pub supply_in_profit: ActiveSupplyPattern, - pub total_unrealized_pnl: MetricPattern1, - pub unrealized_loss: MetricPattern1, - pub unrealized_profit: MetricPattern1, -} - -impl UnrealizedPattern { - /// Create a new pattern node with accumulated metric name. - pub fn new(client: Arc, acc: String) -> Self { - Self { - neg_unrealized_loss: MetricPattern1::new(client.clone(), _m(&acc, "neg_unrealized_loss")), - net_unrealized_pnl: MetricPattern1::new(client.clone(), _m(&acc, "net_unrealized_pnl")), - supply_in_loss: ActiveSupplyPattern::new(client.clone(), _m(&acc, "supply_in_loss")), - supply_in_profit: ActiveSupplyPattern::new(client.clone(), _m(&acc, "supply_in_profit")), - total_unrealized_pnl: MetricPattern1::new(client.clone(), _m(&acc, "total_unrealized_pnl")), - unrealized_loss: MetricPattern1::new(client.clone(), _m(&acc, "unrealized_loss")), - unrealized_profit: MetricPattern1::new(client.clone(), _m(&acc, "unrealized_profit")), - } - } -} - /// Pattern struct for repeated tree structure. pub struct PeriodCagrPattern { pub _10y: MetricPattern4, @@ -2066,6 +3578,32 @@ impl PeriodCagrPattern { } } +/// Pattern struct for repeated tree structure. +pub struct _0satsPattern2 { + pub activity: ActivityPattern2, + pub cost_basis: CostBasisPattern, + pub outputs: OutputsPattern, + pub realized: RealizedPattern, + pub relative: RelativePattern4, + pub supply: SupplyPattern2, + pub unrealized: UnrealizedPattern, +} + +impl _0satsPattern2 { + /// Create a new pattern node with accumulated metric name. + pub fn new(client: Arc, acc: String) -> Self { + Self { + activity: ActivityPattern2::new(client.clone(), acc.clone()), + cost_basis: CostBasisPattern::new(client.clone(), acc.clone()), + outputs: OutputsPattern::new(client.clone(), _m(&acc, "utxo_count")), + realized: RealizedPattern::new(client.clone(), acc.clone()), + relative: RelativePattern4::new(client.clone(), _m(&acc, "supply_in")), + supply: SupplyPattern2::new(client.clone(), _m(&acc, "supply")), + unrealized: UnrealizedPattern::new(client.clone(), acc.clone()), + } + } +} + /// Pattern struct for repeated tree structure. pub struct ActivityPattern2 { pub coinblocks_destroyed: BlockCountPattern, @@ -2079,9 +3617,18 @@ impl ActivityPattern2 { /// Create a new pattern node with accumulated metric name. pub fn new(client: Arc, acc: String) -> Self { Self { - coinblocks_destroyed: BlockCountPattern::new(client.clone(), _m(&acc, "coinblocks_destroyed")), - coindays_destroyed: BlockCountPattern::new(client.clone(), _m(&acc, "coindays_destroyed")), - satblocks_destroyed: MetricPattern11::new(client.clone(), _m(&acc, "satblocks_destroyed")), + coinblocks_destroyed: BlockCountPattern::new( + client.clone(), + _m(&acc, "coinblocks_destroyed"), + ), + coindays_destroyed: BlockCountPattern::new( + client.clone(), + _m(&acc, "coindays_destroyed"), + ), + satblocks_destroyed: MetricPattern11::new( + client.clone(), + _m(&acc, "satblocks_destroyed"), + ), satdays_destroyed: MetricPattern11::new(client.clone(), _m(&acc, "satdays_destroyed")), sent: UnclaimedRewardsPattern::new(client.clone(), _m(&acc, "sent")), } @@ -2145,37 +3692,19 @@ impl CoinbasePattern2 { } /// Pattern struct for repeated tree structure. -pub struct ActiveSupplyPattern { - pub bitcoin: MetricPattern1, - pub dollars: MetricPattern1, - pub sats: MetricPattern1, +pub struct CoinbasePattern { + pub bitcoin: BitcoinPattern, + pub dollars: DollarsPattern, + pub sats: DollarsPattern, } -impl ActiveSupplyPattern { +impl CoinbasePattern { /// Create a new pattern node with accumulated metric name. pub fn new(client: Arc, acc: String) -> Self { Self { - bitcoin: MetricPattern1::new(client.clone(), _m(&acc, "btc")), - dollars: MetricPattern1::new(client.clone(), _m(&acc, "usd")), - sats: MetricPattern1::new(client.clone(), acc.clone()), - } - } -} - -/// Pattern struct for repeated tree structure. -pub struct SegwitAdoptionPattern { - pub base: MetricPattern11, - pub cumulative: MetricPattern2, - pub sum: MetricPattern2, -} - -impl SegwitAdoptionPattern { - /// Create a new pattern node with accumulated metric name. - pub fn new(client: Arc, acc: String) -> Self { - Self { - base: MetricPattern11::new(client.clone(), acc.clone()), - cumulative: MetricPattern2::new(client.clone(), _m(&acc, "cumulative")), - sum: MetricPattern2::new(client.clone(), _m(&acc, "sum")), + bitcoin: BitcoinPattern::new(client.clone(), _m(&acc, "btc")), + dollars: DollarsPattern::new(client.clone(), _m(&acc, "usd")), + sats: DollarsPattern::new(client.clone(), acc.clone()), } } } @@ -2217,19 +3746,53 @@ impl _2015Pattern { } /// Pattern struct for repeated tree structure. -pub struct CoinbasePattern { - pub bitcoin: BitcoinPattern, - pub dollars: DollarsPattern, - pub sats: DollarsPattern, +pub struct SegwitAdoptionPattern { + pub base: MetricPattern11, + pub cumulative: MetricPattern2, + pub sum: MetricPattern2, } -impl CoinbasePattern { +impl SegwitAdoptionPattern { /// Create a new pattern node with accumulated metric name. pub fn new(client: Arc, acc: String) -> Self { Self { - bitcoin: BitcoinPattern::new(client.clone(), _m(&acc, "btc")), - dollars: DollarsPattern::new(client.clone(), _m(&acc, "usd")), - sats: DollarsPattern::new(client.clone(), acc.clone()), + base: MetricPattern11::new(client.clone(), acc.clone()), + cumulative: MetricPattern2::new(client.clone(), _m(&acc, "cumulative")), + sum: MetricPattern2::new(client.clone(), _m(&acc, "sum")), + } + } +} + +/// Pattern struct for repeated tree structure. +pub struct ActiveSupplyPattern { + pub bitcoin: MetricPattern1, + pub dollars: MetricPattern1, + pub sats: MetricPattern1, +} + +impl ActiveSupplyPattern { + /// Create a new pattern node with accumulated metric name. + pub fn new(client: Arc, acc: String) -> Self { + Self { + bitcoin: MetricPattern1::new(client.clone(), _m(&acc, "btc")), + dollars: MetricPattern1::new(client.clone(), _m(&acc, "usd")), + sats: MetricPattern1::new(client.clone(), acc.clone()), + } + } +} + +/// Pattern struct for repeated tree structure. +pub struct SupplyPattern2 { + pub halved: ActiveSupplyPattern, + pub total: ActiveSupplyPattern, +} + +impl SupplyPattern2 { + /// Create a new pattern node with accumulated metric name. + pub fn new(client: Arc, acc: String) -> Self { + Self { + halved: ActiveSupplyPattern::new(client.clone(), _m(&acc, "halved")), + total: ActiveSupplyPattern::new(client.clone(), acc.clone()), } } } @@ -2276,24 +3839,14 @@ impl RelativePattern4 { /// Create a new pattern node with accumulated metric name. pub fn new(client: Arc, acc: String) -> Self { Self { - supply_in_loss_rel_to_own_supply: MetricPattern1::new(client.clone(), _m(&acc, "loss_rel_to_own_supply")), - supply_in_profit_rel_to_own_supply: MetricPattern1::new(client.clone(), _m(&acc, "profit_rel_to_own_supply")), - } - } -} - -/// Pattern struct for repeated tree structure. -pub struct SupplyPattern2 { - pub halved: ActiveSupplyPattern, - pub total: ActiveSupplyPattern, -} - -impl SupplyPattern2 { - /// Create a new pattern node with accumulated metric name. - pub fn new(client: Arc, acc: String) -> Self { - Self { - halved: ActiveSupplyPattern::new(client.clone(), _m(&acc, "halved")), - total: ActiveSupplyPattern::new(client.clone(), acc.clone()), + supply_in_loss_rel_to_own_supply: MetricPattern1::new( + client.clone(), + _m(&acc, "loss_rel_to_own_supply"), + ), + supply_in_profit_rel_to_own_supply: MetricPattern1::new( + client.clone(), + _m(&acc, "profit_rel_to_own_supply"), + ), } } } @@ -2314,22 +3867,6 @@ impl BitcoinPattern2 { } } -/// Pattern struct for repeated tree structure. -pub struct BlockCountPattern { - pub cumulative: MetricPattern1, - pub sum: MetricPattern1, -} - -impl BlockCountPattern { - /// Create a new pattern node with accumulated metric name. - pub fn new(client: Arc, acc: String) -> Self { - Self { - cumulative: MetricPattern1::new(client.clone(), _m(&acc, "cumulative")), - sum: MetricPattern1::new(client.clone(), acc.clone()), - } - } -} - /// Pattern struct for repeated tree structure. pub struct SatsPattern { pub ohlc: MetricPattern1, @@ -2346,6 +3883,22 @@ impl SatsPattern { } } +/// Pattern struct for repeated tree structure. +pub struct BlockCountPattern { + pub cumulative: MetricPattern1, + pub sum: MetricPattern1, +} + +impl BlockCountPattern { + /// Create a new pattern node with accumulated metric name. + pub fn new(client: Arc, acc: String) -> Self { + Self { + cumulative: MetricPattern1::new(client.clone(), _m(&acc, "cumulative")), + sum: MetricPattern1::new(client.clone(), acc.clone()), + } + } +} + /// Pattern struct for repeated tree structure. pub struct RealizedPriceExtraPattern { pub ratio: MetricPattern4, @@ -2402,7 +3955,10 @@ impl MetricsTree { blocks: MetricsTree_Blocks::new(client.clone(), format!("{base_path}_blocks")), cointime: MetricsTree_Cointime::new(client.clone(), format!("{base_path}_cointime")), constants: MetricsTree_Constants::new(client.clone(), format!("{base_path}_constants")), - distribution: MetricsTree_Distribution::new(client.clone(), format!("{base_path}_distribution")), + distribution: MetricsTree_Distribution::new( + client.clone(), + format!("{base_path}_distribution"), + ), indexes: MetricsTree_Indexes::new(client.clone(), format!("{base_path}_indexes")), inputs: MetricsTree_Inputs::new(client.clone(), format!("{base_path}_inputs")), market: MetricsTree_Market::new(client.clone(), format!("{base_path}_market")), @@ -2412,7 +3968,10 @@ impl MetricsTree { price: MetricsTree_Price::new(client.clone(), format!("{base_path}_price")), scripts: MetricsTree_Scripts::new(client.clone(), format!("{base_path}_scripts")), supply: MetricsTree_Supply::new(client.clone(), format!("{base_path}_supply")), - transactions: MetricsTree_Transactions::new(client.clone(), format!("{base_path}_transactions")), + transactions: MetricsTree_Transactions::new( + client.clone(), + format!("{base_path}_transactions"), + ), } } } @@ -2440,14 +3999,38 @@ pub struct MetricsTree_Addresses { impl MetricsTree_Addresses { pub fn new(client: Arc, base_path: String) -> Self { Self { - first_p2aaddressindex: MetricPattern11::new(client.clone(), "first_p2aaddressindex".to_string()), - first_p2pk33addressindex: MetricPattern11::new(client.clone(), "first_p2pk33addressindex".to_string()), - first_p2pk65addressindex: MetricPattern11::new(client.clone(), "first_p2pk65addressindex".to_string()), - first_p2pkhaddressindex: MetricPattern11::new(client.clone(), "first_p2pkhaddressindex".to_string()), - first_p2shaddressindex: MetricPattern11::new(client.clone(), "first_p2shaddressindex".to_string()), - first_p2traddressindex: MetricPattern11::new(client.clone(), "first_p2traddressindex".to_string()), - first_p2wpkhaddressindex: MetricPattern11::new(client.clone(), "first_p2wpkhaddressindex".to_string()), - first_p2wshaddressindex: MetricPattern11::new(client.clone(), "first_p2wshaddressindex".to_string()), + first_p2aaddressindex: MetricPattern11::new( + client.clone(), + "first_p2aaddressindex".to_string(), + ), + first_p2pk33addressindex: MetricPattern11::new( + client.clone(), + "first_p2pk33addressindex".to_string(), + ), + first_p2pk65addressindex: MetricPattern11::new( + client.clone(), + "first_p2pk65addressindex".to_string(), + ), + first_p2pkhaddressindex: MetricPattern11::new( + client.clone(), + "first_p2pkhaddressindex".to_string(), + ), + first_p2shaddressindex: MetricPattern11::new( + client.clone(), + "first_p2shaddressindex".to_string(), + ), + first_p2traddressindex: MetricPattern11::new( + client.clone(), + "first_p2traddressindex".to_string(), + ), + first_p2wpkhaddressindex: MetricPattern11::new( + client.clone(), + "first_p2wpkhaddressindex".to_string(), + ), + first_p2wshaddressindex: MetricPattern11::new( + client.clone(), + "first_p2wshaddressindex".to_string(), + ), p2abytes: MetricPattern16::new(client.clone(), "p2abytes".to_string()), p2pk33bytes: MetricPattern18::new(client.clone(), "p2pk33bytes".to_string()), p2pk65bytes: MetricPattern19::new(client.clone(), "p2pk65bytes".to_string()), @@ -2482,12 +4065,21 @@ impl MetricsTree_Blocks { Self { blockhash: MetricPattern11::new(client.clone(), "blockhash".to_string()), count: MetricsTree_Blocks_Count::new(client.clone(), format!("{base_path}_count")), - difficulty: MetricsTree_Blocks_Difficulty::new(client.clone(), format!("{base_path}_difficulty")), + difficulty: MetricsTree_Blocks_Difficulty::new( + client.clone(), + format!("{base_path}_difficulty"), + ), fullness: FullnessPattern::new(client.clone(), "block_fullness".to_string()), - halving: MetricsTree_Blocks_Halving::new(client.clone(), format!("{base_path}_halving")), + halving: MetricsTree_Blocks_Halving::new( + client.clone(), + format!("{base_path}_halving"), + ), interval: FullnessPattern::new(client.clone(), "block_interval".to_string()), mining: MetricsTree_Blocks_Mining::new(client.clone(), format!("{base_path}_mining")), - rewards: MetricsTree_Blocks_Rewards::new(client.clone(), format!("{base_path}_rewards")), + rewards: MetricsTree_Blocks_Rewards::new( + client.clone(), + format!("{base_path}_rewards"), + ), size: MetricsTree_Blocks_Size::new(client.clone(), format!("{base_path}_size")), time: MetricsTree_Blocks_Time::new(client.clone(), format!("{base_path}_time")), total_size: MetricPattern11::new(client.clone(), "total_size".to_string()), @@ -2523,7 +4115,10 @@ impl MetricsTree_Blocks_Count { _24h_block_count: MetricPattern1::new(client.clone(), "24h_block_count".to_string()), _24h_start: MetricPattern11::new(client.clone(), "24h_start".to_string()), block_count: BlockCountPattern::new(client.clone(), "block_count".to_string()), - block_count_target: MetricPattern4::new(client.clone(), "block_count_target".to_string()), + block_count_target: MetricPattern4::new( + client.clone(), + "block_count_target".to_string(), + ), } } } @@ -2543,8 +4138,14 @@ impl MetricsTree_Blocks_Difficulty { Self { adjustment: MetricPattern1::new(client.clone(), "difficulty_adjustment".to_string()), as_hash: MetricPattern1::new(client.clone(), "difficulty_as_hash".to_string()), - blocks_before_next_adjustment: MetricPattern1::new(client.clone(), "blocks_before_next_difficulty_adjustment".to_string()), - days_before_next_adjustment: MetricPattern1::new(client.clone(), "days_before_next_difficulty_adjustment".to_string()), + blocks_before_next_adjustment: MetricPattern1::new( + client.clone(), + "blocks_before_next_difficulty_adjustment".to_string(), + ), + days_before_next_adjustment: MetricPattern1::new( + client.clone(), + "days_before_next_difficulty_adjustment".to_string(), + ), epoch: MetricPattern4::new(client.clone(), "difficultyepoch".to_string()), raw: MetricPattern1::new(client.clone(), "difficulty".to_string()), } @@ -2561,8 +4162,14 @@ pub struct MetricsTree_Blocks_Halving { impl MetricsTree_Blocks_Halving { pub fn new(client: Arc, base_path: String) -> Self { Self { - blocks_before_next_halving: MetricPattern1::new(client.clone(), "blocks_before_next_halving".to_string()), - days_before_next_halving: MetricPattern1::new(client.clone(), "days_before_next_halving".to_string()), + blocks_before_next_halving: MetricPattern1::new( + client.clone(), + "blocks_before_next_halving".to_string(), + ), + days_before_next_halving: MetricPattern1::new( + client.clone(), + "days_before_next_halving".to_string(), + ), epoch: MetricPattern4::new(client.clone(), "halvingepoch".to_string()), } } @@ -2591,20 +4198,38 @@ impl MetricsTree_Blocks_Mining { pub fn new(client: Arc, base_path: String) -> Self { Self { hash_price_phs: MetricPattern1::new(client.clone(), "hash_price_phs".to_string()), - hash_price_phs_min: MetricPattern1::new(client.clone(), "hash_price_phs_min".to_string()), - hash_price_rebound: MetricPattern1::new(client.clone(), "hash_price_rebound".to_string()), + hash_price_phs_min: MetricPattern1::new( + client.clone(), + "hash_price_phs_min".to_string(), + ), + hash_price_rebound: MetricPattern1::new( + client.clone(), + "hash_price_rebound".to_string(), + ), hash_price_ths: MetricPattern1::new(client.clone(), "hash_price_ths".to_string()), - hash_price_ths_min: MetricPattern1::new(client.clone(), "hash_price_ths_min".to_string()), + hash_price_ths_min: MetricPattern1::new( + client.clone(), + "hash_price_ths_min".to_string(), + ), hash_rate: MetricPattern1::new(client.clone(), "hash_rate".to_string()), hash_rate_1m_sma: MetricPattern4::new(client.clone(), "hash_rate_1m_sma".to_string()), hash_rate_1w_sma: MetricPattern4::new(client.clone(), "hash_rate_1w_sma".to_string()), hash_rate_1y_sma: MetricPattern4::new(client.clone(), "hash_rate_1y_sma".to_string()), hash_rate_2m_sma: MetricPattern4::new(client.clone(), "hash_rate_2m_sma".to_string()), hash_value_phs: MetricPattern1::new(client.clone(), "hash_value_phs".to_string()), - hash_value_phs_min: MetricPattern1::new(client.clone(), "hash_value_phs_min".to_string()), - hash_value_rebound: MetricPattern1::new(client.clone(), "hash_value_rebound".to_string()), + hash_value_phs_min: MetricPattern1::new( + client.clone(), + "hash_value_phs_min".to_string(), + ), + hash_value_rebound: MetricPattern1::new( + client.clone(), + "hash_value_rebound".to_string(), + ), hash_value_ths: MetricPattern1::new(client.clone(), "hash_value_ths".to_string()), - hash_value_ths_min: MetricPattern1::new(client.clone(), "hash_value_ths_min".to_string()), + hash_value_ths_min: MetricPattern1::new( + client.clone(), + "hash_value_ths_min".to_string(), + ), } } } @@ -2623,13 +4248,22 @@ pub struct MetricsTree_Blocks_Rewards { impl MetricsTree_Blocks_Rewards { pub fn new(client: Arc, base_path: String) -> Self { Self { - _24h_coinbase_sum: MetricsTree_Blocks_Rewards_24hCoinbaseSum::new(client.clone(), format!("{base_path}_24h_coinbase_sum")), + _24h_coinbase_sum: MetricsTree_Blocks_Rewards_24hCoinbaseSum::new( + client.clone(), + format!("{base_path}_24h_coinbase_sum"), + ), coinbase: CoinbasePattern::new(client.clone(), "coinbase".to_string()), fee_dominance: MetricPattern6::new(client.clone(), "fee_dominance".to_string()), subsidy: CoinbasePattern::new(client.clone(), "subsidy".to_string()), subsidy_dominance: MetricPattern6::new(client.clone(), "subsidy_dominance".to_string()), - subsidy_usd_1y_sma: MetricPattern4::new(client.clone(), "subsidy_usd_1y_sma".to_string()), - unclaimed_rewards: UnclaimedRewardsPattern::new(client.clone(), "unclaimed_rewards".to_string()), + subsidy_usd_1y_sma: MetricPattern4::new( + client.clone(), + "subsidy_usd_1y_sma".to_string(), + ), + unclaimed_rewards: UnclaimedRewardsPattern::new( + client.clone(), + "unclaimed_rewards".to_string(), + ), } } } @@ -2694,7 +4328,10 @@ impl MetricsTree_Blocks_Time { Self { date: MetricPattern11::new(client.clone(), "date".to_string()), timestamp: MetricPattern1::new(client.clone(), "timestamp".to_string()), - timestamp_monotonic: MetricPattern11::new(client.clone(), "timestamp_monotonic".to_string()), + timestamp_monotonic: MetricPattern11::new( + client.clone(), + "timestamp_monotonic".to_string(), + ), } } } @@ -2712,10 +4349,19 @@ pub struct MetricsTree_Cointime { impl MetricsTree_Cointime { pub fn new(client: Arc, base_path: String) -> Self { Self { - activity: MetricsTree_Cointime_Activity::new(client.clone(), format!("{base_path}_activity")), - adjusted: MetricsTree_Cointime_Adjusted::new(client.clone(), format!("{base_path}_adjusted")), + activity: MetricsTree_Cointime_Activity::new( + client.clone(), + format!("{base_path}_activity"), + ), + adjusted: MetricsTree_Cointime_Adjusted::new( + client.clone(), + format!("{base_path}_adjusted"), + ), cap: MetricsTree_Cointime_Cap::new(client.clone(), format!("{base_path}_cap")), - pricing: MetricsTree_Cointime_Pricing::new(client.clone(), format!("{base_path}_pricing")), + pricing: MetricsTree_Cointime_Pricing::new( + client.clone(), + format!("{base_path}_pricing"), + ), supply: MetricsTree_Cointime_Supply::new(client.clone(), format!("{base_path}_supply")), value: MetricsTree_Cointime_Value::new(client.clone(), format!("{base_path}_value")), } @@ -2734,9 +4380,18 @@ pub struct MetricsTree_Cointime_Activity { impl MetricsTree_Cointime_Activity { pub fn new(client: Arc, base_path: String) -> Self { Self { - activity_to_vaultedness_ratio: MetricPattern1::new(client.clone(), "activity_to_vaultedness_ratio".to_string()), - coinblocks_created: BlockCountPattern::new(client.clone(), "coinblocks_created".to_string()), - coinblocks_stored: BlockCountPattern::new(client.clone(), "coinblocks_stored".to_string()), + activity_to_vaultedness_ratio: MetricPattern1::new( + client.clone(), + "activity_to_vaultedness_ratio".to_string(), + ), + coinblocks_created: BlockCountPattern::new( + client.clone(), + "coinblocks_created".to_string(), + ), + coinblocks_stored: BlockCountPattern::new( + client.clone(), + "coinblocks_stored".to_string(), + ), liveliness: MetricPattern1::new(client.clone(), "liveliness".to_string()), vaultedness: MetricPattern1::new(client.clone(), "vaultedness".to_string()), } @@ -2753,9 +4408,18 @@ pub struct MetricsTree_Cointime_Adjusted { impl MetricsTree_Cointime_Adjusted { pub fn new(client: Arc, base_path: String) -> Self { Self { - cointime_adj_inflation_rate: MetricPattern4::new(client.clone(), "cointime_adj_inflation_rate".to_string()), - cointime_adj_tx_btc_velocity: MetricPattern4::new(client.clone(), "cointime_adj_tx_btc_velocity".to_string()), - cointime_adj_tx_usd_velocity: MetricPattern4::new(client.clone(), "cointime_adj_tx_usd_velocity".to_string()), + cointime_adj_inflation_rate: MetricPattern4::new( + client.clone(), + "cointime_adj_inflation_rate".to_string(), + ), + cointime_adj_tx_btc_velocity: MetricPattern4::new( + client.clone(), + "cointime_adj_tx_btc_velocity".to_string(), + ), + cointime_adj_tx_usd_velocity: MetricPattern4::new( + client.clone(), + "cointime_adj_tx_usd_velocity".to_string(), + ), } } } @@ -2797,13 +4461,25 @@ impl MetricsTree_Cointime_Pricing { pub fn new(client: Arc, base_path: String) -> Self { Self { active_price: MetricPattern1::new(client.clone(), "active_price".to_string()), - active_price_ratio: ActivePriceRatioPattern::new(client.clone(), "active_price_ratio".to_string()), + active_price_ratio: ActivePriceRatioPattern::new( + client.clone(), + "active_price_ratio".to_string(), + ), cointime_price: MetricPattern1::new(client.clone(), "cointime_price".to_string()), - cointime_price_ratio: ActivePriceRatioPattern::new(client.clone(), "cointime_price_ratio".to_string()), + cointime_price_ratio: ActivePriceRatioPattern::new( + client.clone(), + "cointime_price_ratio".to_string(), + ), true_market_mean: MetricPattern1::new(client.clone(), "true_market_mean".to_string()), - true_market_mean_ratio: ActivePriceRatioPattern::new(client.clone(), "true_market_mean_ratio".to_string()), + true_market_mean_ratio: ActivePriceRatioPattern::new( + client.clone(), + "true_market_mean_ratio".to_string(), + ), vaulted_price: MetricPattern1::new(client.clone(), "vaulted_price".to_string()), - vaulted_price_ratio: ActivePriceRatioPattern::new(client.clone(), "vaulted_price_ratio".to_string()), + vaulted_price_ratio: ActivePriceRatioPattern::new( + client.clone(), + "vaulted_price_ratio".to_string(), + ), } } } @@ -2833,9 +4509,18 @@ pub struct MetricsTree_Cointime_Value { impl MetricsTree_Cointime_Value { pub fn new(client: Arc, base_path: String) -> Self { Self { - cointime_value_created: BlockCountPattern::new(client.clone(), "cointime_value_created".to_string()), - cointime_value_destroyed: BlockCountPattern::new(client.clone(), "cointime_value_destroyed".to_string()), - cointime_value_stored: BlockCountPattern::new(client.clone(), "cointime_value_stored".to_string()), + cointime_value_created: BlockCountPattern::new( + client.clone(), + "cointime_value_created".to_string(), + ), + cointime_value_destroyed: BlockCountPattern::new( + client.clone(), + "cointime_value_destroyed".to_string(), + ), + cointime_value_stored: BlockCountPattern::new( + client.clone(), + "cointime_value_stored".to_string(), + ), } } } @@ -2904,14 +4589,32 @@ impl MetricsTree_Distribution { pub fn new(client: Arc, base_path: String) -> Self { Self { addr_count: AddrCountPattern::new(client.clone(), "addr_count".to_string()), - address_cohorts: MetricsTree_Distribution_AddressCohorts::new(client.clone(), format!("{base_path}_address_cohorts")), - addresses_data: MetricsTree_Distribution_AddressesData::new(client.clone(), format!("{base_path}_addresses_data")), - any_address_indexes: MetricsTree_Distribution_AnyAddressIndexes::new(client.clone(), format!("{base_path}_any_address_indexes")), + address_cohorts: MetricsTree_Distribution_AddressCohorts::new( + client.clone(), + format!("{base_path}_address_cohorts"), + ), + addresses_data: MetricsTree_Distribution_AddressesData::new( + client.clone(), + format!("{base_path}_addresses_data"), + ), + any_address_indexes: MetricsTree_Distribution_AnyAddressIndexes::new( + client.clone(), + format!("{base_path}_any_address_indexes"), + ), chain_state: MetricPattern11::new(client.clone(), "chain".to_string()), empty_addr_count: AddrCountPattern::new(client.clone(), "empty_addr_count".to_string()), - emptyaddressindex: MetricPattern32::new(client.clone(), "emptyaddressindex".to_string()), - loadedaddressindex: MetricPattern31::new(client.clone(), "loadedaddressindex".to_string()), - utxo_cohorts: MetricsTree_Distribution_UtxoCohorts::new(client.clone(), format!("{base_path}_utxo_cohorts")), + emptyaddressindex: MetricPattern32::new( + client.clone(), + "emptyaddressindex".to_string(), + ), + loadedaddressindex: MetricPattern31::new( + client.clone(), + "loadedaddressindex".to_string(), + ), + utxo_cohorts: MetricsTree_Distribution_UtxoCohorts::new( + client.clone(), + format!("{base_path}_utxo_cohorts"), + ), } } } @@ -2926,9 +4629,18 @@ pub struct MetricsTree_Distribution_AddressCohorts { impl MetricsTree_Distribution_AddressCohorts { pub fn new(client: Arc, base_path: String) -> Self { Self { - amount_range: MetricsTree_Distribution_AddressCohorts_AmountRange::new(client.clone(), format!("{base_path}_amount_range")), - ge_amount: MetricsTree_Distribution_AddressCohorts_GeAmount::new(client.clone(), format!("{base_path}_ge_amount")), - lt_amount: MetricsTree_Distribution_AddressCohorts_LtAmount::new(client.clone(), format!("{base_path}_lt_amount")), + amount_range: MetricsTree_Distribution_AddressCohorts_AmountRange::new( + client.clone(), + format!("{base_path}_amount_range"), + ), + ge_amount: MetricsTree_Distribution_AddressCohorts_GeAmount::new( + client.clone(), + format!("{base_path}_ge_amount"), + ), + lt_amount: MetricsTree_Distribution_AddressCohorts_LtAmount::new( + client.clone(), + format!("{base_path}_lt_amount"), + ), } } } @@ -2956,20 +4668,62 @@ impl MetricsTree_Distribution_AddressCohorts_AmountRange { pub fn new(client: Arc, base_path: String) -> Self { Self { _0sats: _0satsPattern::new(client.clone(), "addrs_with_0sats".to_string()), - _100btc_to_1k_btc: _0satsPattern::new(client.clone(), "addrs_above_100btc_under_1k_btc".to_string()), - _100k_btc_or_more: _0satsPattern::new(client.clone(), "addrs_above_100k_btc".to_string()), - _100k_sats_to_1m_sats: _0satsPattern::new(client.clone(), "addrs_above_100k_sats_under_1m_sats".to_string()), - _100sats_to_1k_sats: _0satsPattern::new(client.clone(), "addrs_above_100sats_under_1k_sats".to_string()), - _10btc_to_100btc: _0satsPattern::new(client.clone(), "addrs_above_10btc_under_100btc".to_string()), - _10k_btc_to_100k_btc: _0satsPattern::new(client.clone(), "addrs_above_10k_btc_under_100k_btc".to_string()), - _10k_sats_to_100k_sats: _0satsPattern::new(client.clone(), "addrs_above_10k_sats_under_100k_sats".to_string()), - _10m_sats_to_1btc: _0satsPattern::new(client.clone(), "addrs_above_10m_sats_under_1btc".to_string()), - _10sats_to_100sats: _0satsPattern::new(client.clone(), "addrs_above_10sats_under_100sats".to_string()), - _1btc_to_10btc: _0satsPattern::new(client.clone(), "addrs_above_1btc_under_10btc".to_string()), - _1k_btc_to_10k_btc: _0satsPattern::new(client.clone(), "addrs_above_1k_btc_under_10k_btc".to_string()), - _1k_sats_to_10k_sats: _0satsPattern::new(client.clone(), "addrs_above_1k_sats_under_10k_sats".to_string()), - _1m_sats_to_10m_sats: _0satsPattern::new(client.clone(), "addrs_above_1m_sats_under_10m_sats".to_string()), - _1sat_to_10sats: _0satsPattern::new(client.clone(), "addrs_above_1sat_under_10sats".to_string()), + _100btc_to_1k_btc: _0satsPattern::new( + client.clone(), + "addrs_above_100btc_under_1k_btc".to_string(), + ), + _100k_btc_or_more: _0satsPattern::new( + client.clone(), + "addrs_above_100k_btc".to_string(), + ), + _100k_sats_to_1m_sats: _0satsPattern::new( + client.clone(), + "addrs_above_100k_sats_under_1m_sats".to_string(), + ), + _100sats_to_1k_sats: _0satsPattern::new( + client.clone(), + "addrs_above_100sats_under_1k_sats".to_string(), + ), + _10btc_to_100btc: _0satsPattern::new( + client.clone(), + "addrs_above_10btc_under_100btc".to_string(), + ), + _10k_btc_to_100k_btc: _0satsPattern::new( + client.clone(), + "addrs_above_10k_btc_under_100k_btc".to_string(), + ), + _10k_sats_to_100k_sats: _0satsPattern::new( + client.clone(), + "addrs_above_10k_sats_under_100k_sats".to_string(), + ), + _10m_sats_to_1btc: _0satsPattern::new( + client.clone(), + "addrs_above_10m_sats_under_1btc".to_string(), + ), + _10sats_to_100sats: _0satsPattern::new( + client.clone(), + "addrs_above_10sats_under_100sats".to_string(), + ), + _1btc_to_10btc: _0satsPattern::new( + client.clone(), + "addrs_above_1btc_under_10btc".to_string(), + ), + _1k_btc_to_10k_btc: _0satsPattern::new( + client.clone(), + "addrs_above_1k_btc_under_10k_btc".to_string(), + ), + _1k_sats_to_10k_sats: _0satsPattern::new( + client.clone(), + "addrs_above_1k_sats_under_10k_sats".to_string(), + ), + _1m_sats_to_10m_sats: _0satsPattern::new( + client.clone(), + "addrs_above_1m_sats_under_10m_sats".to_string(), + ), + _1sat_to_10sats: _0satsPattern::new( + client.clone(), + "addrs_above_1sat_under_10sats".to_string(), + ), } } } @@ -3108,17 +4862,50 @@ pub struct MetricsTree_Distribution_UtxoCohorts { impl MetricsTree_Distribution_UtxoCohorts { pub fn new(client: Arc, base_path: String) -> Self { Self { - age_range: MetricsTree_Distribution_UtxoCohorts_AgeRange::new(client.clone(), format!("{base_path}_age_range")), - all: MetricsTree_Distribution_UtxoCohorts_All::new(client.clone(), format!("{base_path}_all")), - amount_range: MetricsTree_Distribution_UtxoCohorts_AmountRange::new(client.clone(), format!("{base_path}_amount_range")), - epoch: MetricsTree_Distribution_UtxoCohorts_Epoch::new(client.clone(), format!("{base_path}_epoch")), - ge_amount: MetricsTree_Distribution_UtxoCohorts_GeAmount::new(client.clone(), format!("{base_path}_ge_amount")), - lt_amount: MetricsTree_Distribution_UtxoCohorts_LtAmount::new(client.clone(), format!("{base_path}_lt_amount")), - max_age: MetricsTree_Distribution_UtxoCohorts_MaxAge::new(client.clone(), format!("{base_path}_max_age")), - min_age: MetricsTree_Distribution_UtxoCohorts_MinAge::new(client.clone(), format!("{base_path}_min_age")), - term: MetricsTree_Distribution_UtxoCohorts_Term::new(client.clone(), format!("{base_path}_term")), - type_: MetricsTree_Distribution_UtxoCohorts_Type::new(client.clone(), format!("{base_path}_type_")), - year: MetricsTree_Distribution_UtxoCohorts_Year::new(client.clone(), format!("{base_path}_year")), + age_range: MetricsTree_Distribution_UtxoCohorts_AgeRange::new( + client.clone(), + format!("{base_path}_age_range"), + ), + all: MetricsTree_Distribution_UtxoCohorts_All::new( + client.clone(), + format!("{base_path}_all"), + ), + amount_range: MetricsTree_Distribution_UtxoCohorts_AmountRange::new( + client.clone(), + format!("{base_path}_amount_range"), + ), + epoch: MetricsTree_Distribution_UtxoCohorts_Epoch::new( + client.clone(), + format!("{base_path}_epoch"), + ), + ge_amount: MetricsTree_Distribution_UtxoCohorts_GeAmount::new( + client.clone(), + format!("{base_path}_ge_amount"), + ), + lt_amount: MetricsTree_Distribution_UtxoCohorts_LtAmount::new( + client.clone(), + format!("{base_path}_lt_amount"), + ), + max_age: MetricsTree_Distribution_UtxoCohorts_MaxAge::new( + client.clone(), + format!("{base_path}_max_age"), + ), + min_age: MetricsTree_Distribution_UtxoCohorts_MinAge::new( + client.clone(), + format!("{base_path}_min_age"), + ), + term: MetricsTree_Distribution_UtxoCohorts_Term::new( + client.clone(), + format!("{base_path}_term"), + ), + type_: MetricsTree_Distribution_UtxoCohorts_Type::new( + client.clone(), + format!("{base_path}_type_"), + ), + year: MetricsTree_Distribution_UtxoCohorts_Year::new( + client.clone(), + format!("{base_path}_year"), + ), } } } @@ -3151,25 +4938,82 @@ pub struct MetricsTree_Distribution_UtxoCohorts_AgeRange { impl MetricsTree_Distribution_UtxoCohorts_AgeRange { pub fn new(client: Arc, base_path: String) -> Self { Self { - _10y_to_12y: _10yTo12yPattern::new(client.clone(), "utxos_at_least_10y_up_to_12y_old".to_string()), - _12y_to_15y: _10yTo12yPattern::new(client.clone(), "utxos_at_least_12y_up_to_15y_old".to_string()), - _1d_to_1w: _10yTo12yPattern::new(client.clone(), "utxos_at_least_1d_up_to_1w_old".to_string()), - _1h_to_1d: _10yTo12yPattern::new(client.clone(), "utxos_at_least_1h_up_to_1d_old".to_string()), - _1m_to_2m: _10yTo12yPattern::new(client.clone(), "utxos_at_least_1m_up_to_2m_old".to_string()), - _1w_to_1m: _10yTo12yPattern::new(client.clone(), "utxos_at_least_1w_up_to_1m_old".to_string()), - _1y_to_2y: _10yTo12yPattern::new(client.clone(), "utxos_at_least_1y_up_to_2y_old".to_string()), - _2m_to_3m: _10yTo12yPattern::new(client.clone(), "utxos_at_least_2m_up_to_3m_old".to_string()), - _2y_to_3y: _10yTo12yPattern::new(client.clone(), "utxos_at_least_2y_up_to_3y_old".to_string()), - _3m_to_4m: _10yTo12yPattern::new(client.clone(), "utxos_at_least_3m_up_to_4m_old".to_string()), - _3y_to_4y: _10yTo12yPattern::new(client.clone(), "utxos_at_least_3y_up_to_4y_old".to_string()), - _4m_to_5m: _10yTo12yPattern::new(client.clone(), "utxos_at_least_4m_up_to_5m_old".to_string()), - _4y_to_5y: _10yTo12yPattern::new(client.clone(), "utxos_at_least_4y_up_to_5y_old".to_string()), - _5m_to_6m: _10yTo12yPattern::new(client.clone(), "utxos_at_least_5m_up_to_6m_old".to_string()), - _5y_to_6y: _10yTo12yPattern::new(client.clone(), "utxos_at_least_5y_up_to_6y_old".to_string()), - _6m_to_1y: _10yTo12yPattern::new(client.clone(), "utxos_at_least_6m_up_to_1y_old".to_string()), - _6y_to_7y: _10yTo12yPattern::new(client.clone(), "utxos_at_least_6y_up_to_7y_old".to_string()), - _7y_to_8y: _10yTo12yPattern::new(client.clone(), "utxos_at_least_7y_up_to_8y_old".to_string()), - _8y_to_10y: _10yTo12yPattern::new(client.clone(), "utxos_at_least_8y_up_to_10y_old".to_string()), + _10y_to_12y: _10yTo12yPattern::new( + client.clone(), + "utxos_at_least_10y_up_to_12y_old".to_string(), + ), + _12y_to_15y: _10yTo12yPattern::new( + client.clone(), + "utxos_at_least_12y_up_to_15y_old".to_string(), + ), + _1d_to_1w: _10yTo12yPattern::new( + client.clone(), + "utxos_at_least_1d_up_to_1w_old".to_string(), + ), + _1h_to_1d: _10yTo12yPattern::new( + client.clone(), + "utxos_at_least_1h_up_to_1d_old".to_string(), + ), + _1m_to_2m: _10yTo12yPattern::new( + client.clone(), + "utxos_at_least_1m_up_to_2m_old".to_string(), + ), + _1w_to_1m: _10yTo12yPattern::new( + client.clone(), + "utxos_at_least_1w_up_to_1m_old".to_string(), + ), + _1y_to_2y: _10yTo12yPattern::new( + client.clone(), + "utxos_at_least_1y_up_to_2y_old".to_string(), + ), + _2m_to_3m: _10yTo12yPattern::new( + client.clone(), + "utxos_at_least_2m_up_to_3m_old".to_string(), + ), + _2y_to_3y: _10yTo12yPattern::new( + client.clone(), + "utxos_at_least_2y_up_to_3y_old".to_string(), + ), + _3m_to_4m: _10yTo12yPattern::new( + client.clone(), + "utxos_at_least_3m_up_to_4m_old".to_string(), + ), + _3y_to_4y: _10yTo12yPattern::new( + client.clone(), + "utxos_at_least_3y_up_to_4y_old".to_string(), + ), + _4m_to_5m: _10yTo12yPattern::new( + client.clone(), + "utxos_at_least_4m_up_to_5m_old".to_string(), + ), + _4y_to_5y: _10yTo12yPattern::new( + client.clone(), + "utxos_at_least_4y_up_to_5y_old".to_string(), + ), + _5m_to_6m: _10yTo12yPattern::new( + client.clone(), + "utxos_at_least_5m_up_to_6m_old".to_string(), + ), + _5y_to_6y: _10yTo12yPattern::new( + client.clone(), + "utxos_at_least_5y_up_to_6y_old".to_string(), + ), + _6m_to_1y: _10yTo12yPattern::new( + client.clone(), + "utxos_at_least_6m_up_to_1y_old".to_string(), + ), + _6y_to_7y: _10yTo12yPattern::new( + client.clone(), + "utxos_at_least_6y_up_to_7y_old".to_string(), + ), + _7y_to_8y: _10yTo12yPattern::new( + client.clone(), + "utxos_at_least_7y_up_to_8y_old".to_string(), + ), + _8y_to_10y: _10yTo12yPattern::new( + client.clone(), + "utxos_at_least_8y_up_to_10y_old".to_string(), + ), from_15y: _10yTo12yPattern::new(client.clone(), "utxos_at_least_15y_old".to_string()), up_to_1h: _10yTo12yPattern::new(client.clone(), "utxos_up_to_1h_old".to_string()), } @@ -3191,10 +5035,16 @@ impl MetricsTree_Distribution_UtxoCohorts_All { pub fn new(client: Arc, base_path: String) -> Self { Self { activity: ActivityPattern2::new(client.clone(), "".to_string()), - cost_basis: MetricsTree_Distribution_UtxoCohorts_All_CostBasis::new(client.clone(), format!("{base_path}_cost_basis")), + cost_basis: MetricsTree_Distribution_UtxoCohorts_All_CostBasis::new( + client.clone(), + format!("{base_path}_cost_basis"), + ), outputs: OutputsPattern::new(client.clone(), "utxo_count".to_string()), realized: RealizedPattern3::new(client.clone(), "".to_string()), - relative: MetricsTree_Distribution_UtxoCohorts_All_Relative::new(client.clone(), format!("{base_path}_relative")), + relative: MetricsTree_Distribution_UtxoCohorts_All_Relative::new( + client.clone(), + format!("{base_path}_relative"), + ), supply: SupplyPattern2::new(client.clone(), "supply".to_string()), unrealized: UnrealizedPattern::new(client.clone(), "".to_string()), } @@ -3231,12 +5081,30 @@ pub struct MetricsTree_Distribution_UtxoCohorts_All_Relative { impl MetricsTree_Distribution_UtxoCohorts_All_Relative { pub fn new(client: Arc, base_path: String) -> Self { Self { - neg_unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1::new(client.clone(), "neg_unrealized_loss_rel_to_own_total_unrealized_pnl".to_string()), - net_unrealized_pnl_rel_to_own_total_unrealized_pnl: MetricPattern1::new(client.clone(), "net_unrealized_pnl_rel_to_own_total_unrealized_pnl".to_string()), - supply_in_loss_rel_to_own_supply: MetricPattern1::new(client.clone(), "supply_in_loss_rel_to_own_supply".to_string()), - supply_in_profit_rel_to_own_supply: MetricPattern1::new(client.clone(), "supply_in_profit_rel_to_own_supply".to_string()), - unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1::new(client.clone(), "unrealized_loss_rel_to_own_total_unrealized_pnl".to_string()), - unrealized_profit_rel_to_own_total_unrealized_pnl: MetricPattern1::new(client.clone(), "unrealized_profit_rel_to_own_total_unrealized_pnl".to_string()), + neg_unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1::new( + client.clone(), + "neg_unrealized_loss_rel_to_own_total_unrealized_pnl".to_string(), + ), + net_unrealized_pnl_rel_to_own_total_unrealized_pnl: MetricPattern1::new( + client.clone(), + "net_unrealized_pnl_rel_to_own_total_unrealized_pnl".to_string(), + ), + supply_in_loss_rel_to_own_supply: MetricPattern1::new( + client.clone(), + "supply_in_loss_rel_to_own_supply".to_string(), + ), + supply_in_profit_rel_to_own_supply: MetricPattern1::new( + client.clone(), + "supply_in_profit_rel_to_own_supply".to_string(), + ), + unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1::new( + client.clone(), + "unrealized_loss_rel_to_own_total_unrealized_pnl".to_string(), + ), + unrealized_profit_rel_to_own_total_unrealized_pnl: MetricPattern1::new( + client.clone(), + "unrealized_profit_rel_to_own_total_unrealized_pnl".to_string(), + ), } } } @@ -3264,20 +5132,62 @@ impl MetricsTree_Distribution_UtxoCohorts_AmountRange { pub fn new(client: Arc, base_path: String) -> Self { Self { _0sats: _0satsPattern2::new(client.clone(), "utxos_with_0sats".to_string()), - _100btc_to_1k_btc: _0satsPattern2::new(client.clone(), "utxos_above_100btc_under_1k_btc".to_string()), - _100k_btc_or_more: _0satsPattern2::new(client.clone(), "utxos_above_100k_btc".to_string()), - _100k_sats_to_1m_sats: _0satsPattern2::new(client.clone(), "utxos_above_100k_sats_under_1m_sats".to_string()), - _100sats_to_1k_sats: _0satsPattern2::new(client.clone(), "utxos_above_100sats_under_1k_sats".to_string()), - _10btc_to_100btc: _0satsPattern2::new(client.clone(), "utxos_above_10btc_under_100btc".to_string()), - _10k_btc_to_100k_btc: _0satsPattern2::new(client.clone(), "utxos_above_10k_btc_under_100k_btc".to_string()), - _10k_sats_to_100k_sats: _0satsPattern2::new(client.clone(), "utxos_above_10k_sats_under_100k_sats".to_string()), - _10m_sats_to_1btc: _0satsPattern2::new(client.clone(), "utxos_above_10m_sats_under_1btc".to_string()), - _10sats_to_100sats: _0satsPattern2::new(client.clone(), "utxos_above_10sats_under_100sats".to_string()), - _1btc_to_10btc: _0satsPattern2::new(client.clone(), "utxos_above_1btc_under_10btc".to_string()), - _1k_btc_to_10k_btc: _0satsPattern2::new(client.clone(), "utxos_above_1k_btc_under_10k_btc".to_string()), - _1k_sats_to_10k_sats: _0satsPattern2::new(client.clone(), "utxos_above_1k_sats_under_10k_sats".to_string()), - _1m_sats_to_10m_sats: _0satsPattern2::new(client.clone(), "utxos_above_1m_sats_under_10m_sats".to_string()), - _1sat_to_10sats: _0satsPattern2::new(client.clone(), "utxos_above_1sat_under_10sats".to_string()), + _100btc_to_1k_btc: _0satsPattern2::new( + client.clone(), + "utxos_above_100btc_under_1k_btc".to_string(), + ), + _100k_btc_or_more: _0satsPattern2::new( + client.clone(), + "utxos_above_100k_btc".to_string(), + ), + _100k_sats_to_1m_sats: _0satsPattern2::new( + client.clone(), + "utxos_above_100k_sats_under_1m_sats".to_string(), + ), + _100sats_to_1k_sats: _0satsPattern2::new( + client.clone(), + "utxos_above_100sats_under_1k_sats".to_string(), + ), + _10btc_to_100btc: _0satsPattern2::new( + client.clone(), + "utxos_above_10btc_under_100btc".to_string(), + ), + _10k_btc_to_100k_btc: _0satsPattern2::new( + client.clone(), + "utxos_above_10k_btc_under_100k_btc".to_string(), + ), + _10k_sats_to_100k_sats: _0satsPattern2::new( + client.clone(), + "utxos_above_10k_sats_under_100k_sats".to_string(), + ), + _10m_sats_to_1btc: _0satsPattern2::new( + client.clone(), + "utxos_above_10m_sats_under_1btc".to_string(), + ), + _10sats_to_100sats: _0satsPattern2::new( + client.clone(), + "utxos_above_10sats_under_100sats".to_string(), + ), + _1btc_to_10btc: _0satsPattern2::new( + client.clone(), + "utxos_above_1btc_under_10btc".to_string(), + ), + _1k_btc_to_10k_btc: _0satsPattern2::new( + client.clone(), + "utxos_above_1k_btc_under_10k_btc".to_string(), + ), + _1k_sats_to_10k_sats: _0satsPattern2::new( + client.clone(), + "utxos_above_1k_sats_under_10k_sats".to_string(), + ), + _1m_sats_to_10m_sats: _0satsPattern2::new( + client.clone(), + "utxos_above_1m_sats_under_10m_sats".to_string(), + ), + _1sat_to_10sats: _0satsPattern2::new( + client.clone(), + "utxos_above_1sat_under_10sats".to_string(), + ), } } } @@ -3480,8 +5390,14 @@ pub struct MetricsTree_Distribution_UtxoCohorts_Term { impl MetricsTree_Distribution_UtxoCohorts_Term { pub fn new(client: Arc, base_path: String) -> Self { Self { - long: MetricsTree_Distribution_UtxoCohorts_Term_Long::new(client.clone(), format!("{base_path}_long")), - short: MetricsTree_Distribution_UtxoCohorts_Term_Short::new(client.clone(), format!("{base_path}_short")), + long: MetricsTree_Distribution_UtxoCohorts_Term_Long::new( + client.clone(), + format!("{base_path}_long"), + ), + short: MetricsTree_Distribution_UtxoCohorts_Term_Short::new( + client.clone(), + format!("{base_path}_short"), + ), } } } @@ -3637,20 +5553,59 @@ pub struct MetricsTree_Indexes { impl MetricsTree_Indexes { pub fn new(client: Arc, base_path: String) -> Self { Self { - address: MetricsTree_Indexes_Address::new(client.clone(), format!("{base_path}_address")), - dateindex: MetricsTree_Indexes_Dateindex::new(client.clone(), format!("{base_path}_dateindex")), - decadeindex: MetricsTree_Indexes_Decadeindex::new(client.clone(), format!("{base_path}_decadeindex")), - difficultyepoch: MetricsTree_Indexes_Difficultyepoch::new(client.clone(), format!("{base_path}_difficultyepoch")), - halvingepoch: MetricsTree_Indexes_Halvingepoch::new(client.clone(), format!("{base_path}_halvingepoch")), + address: MetricsTree_Indexes_Address::new( + client.clone(), + format!("{base_path}_address"), + ), + dateindex: MetricsTree_Indexes_Dateindex::new( + client.clone(), + format!("{base_path}_dateindex"), + ), + decadeindex: MetricsTree_Indexes_Decadeindex::new( + client.clone(), + format!("{base_path}_decadeindex"), + ), + difficultyepoch: MetricsTree_Indexes_Difficultyepoch::new( + client.clone(), + format!("{base_path}_difficultyepoch"), + ), + halvingepoch: MetricsTree_Indexes_Halvingepoch::new( + client.clone(), + format!("{base_path}_halvingepoch"), + ), height: MetricsTree_Indexes_Height::new(client.clone(), format!("{base_path}_height")), - monthindex: MetricsTree_Indexes_Monthindex::new(client.clone(), format!("{base_path}_monthindex")), - quarterindex: MetricsTree_Indexes_Quarterindex::new(client.clone(), format!("{base_path}_quarterindex")), - semesterindex: MetricsTree_Indexes_Semesterindex::new(client.clone(), format!("{base_path}_semesterindex")), - txindex: MetricsTree_Indexes_Txindex::new(client.clone(), format!("{base_path}_txindex")), - txinindex: MetricsTree_Indexes_Txinindex::new(client.clone(), format!("{base_path}_txinindex")), - txoutindex: MetricsTree_Indexes_Txoutindex::new(client.clone(), format!("{base_path}_txoutindex")), - weekindex: MetricsTree_Indexes_Weekindex::new(client.clone(), format!("{base_path}_weekindex")), - yearindex: MetricsTree_Indexes_Yearindex::new(client.clone(), format!("{base_path}_yearindex")), + monthindex: MetricsTree_Indexes_Monthindex::new( + client.clone(), + format!("{base_path}_monthindex"), + ), + quarterindex: MetricsTree_Indexes_Quarterindex::new( + client.clone(), + format!("{base_path}_quarterindex"), + ), + semesterindex: MetricsTree_Indexes_Semesterindex::new( + client.clone(), + format!("{base_path}_semesterindex"), + ), + txindex: MetricsTree_Indexes_Txindex::new( + client.clone(), + format!("{base_path}_txindex"), + ), + txinindex: MetricsTree_Indexes_Txinindex::new( + client.clone(), + format!("{base_path}_txinindex"), + ), + txoutindex: MetricsTree_Indexes_Txoutindex::new( + client.clone(), + format!("{base_path}_txoutindex"), + ), + weekindex: MetricsTree_Indexes_Weekindex::new( + client.clone(), + format!("{base_path}_weekindex"), + ), + yearindex: MetricsTree_Indexes_Yearindex::new( + client.clone(), + format!("{base_path}_yearindex"), + ), } } } @@ -3674,18 +5629,51 @@ pub struct MetricsTree_Indexes_Address { impl MetricsTree_Indexes_Address { pub fn new(client: Arc, base_path: String) -> Self { Self { - empty: MetricsTree_Indexes_Address_Empty::new(client.clone(), format!("{base_path}_empty")), - opreturn: MetricsTree_Indexes_Address_Opreturn::new(client.clone(), format!("{base_path}_opreturn")), + empty: MetricsTree_Indexes_Address_Empty::new( + client.clone(), + format!("{base_path}_empty"), + ), + opreturn: MetricsTree_Indexes_Address_Opreturn::new( + client.clone(), + format!("{base_path}_opreturn"), + ), p2a: MetricsTree_Indexes_Address_P2a::new(client.clone(), format!("{base_path}_p2a")), - p2ms: MetricsTree_Indexes_Address_P2ms::new(client.clone(), format!("{base_path}_p2ms")), - p2pk33: MetricsTree_Indexes_Address_P2pk33::new(client.clone(), format!("{base_path}_p2pk33")), - p2pk65: MetricsTree_Indexes_Address_P2pk65::new(client.clone(), format!("{base_path}_p2pk65")), - p2pkh: MetricsTree_Indexes_Address_P2pkh::new(client.clone(), format!("{base_path}_p2pkh")), - p2sh: MetricsTree_Indexes_Address_P2sh::new(client.clone(), format!("{base_path}_p2sh")), - p2tr: MetricsTree_Indexes_Address_P2tr::new(client.clone(), format!("{base_path}_p2tr")), - p2wpkh: MetricsTree_Indexes_Address_P2wpkh::new(client.clone(), format!("{base_path}_p2wpkh")), - p2wsh: MetricsTree_Indexes_Address_P2wsh::new(client.clone(), format!("{base_path}_p2wsh")), - unknown: MetricsTree_Indexes_Address_Unknown::new(client.clone(), format!("{base_path}_unknown")), + p2ms: MetricsTree_Indexes_Address_P2ms::new( + client.clone(), + format!("{base_path}_p2ms"), + ), + p2pk33: MetricsTree_Indexes_Address_P2pk33::new( + client.clone(), + format!("{base_path}_p2pk33"), + ), + p2pk65: MetricsTree_Indexes_Address_P2pk65::new( + client.clone(), + format!("{base_path}_p2pk65"), + ), + p2pkh: MetricsTree_Indexes_Address_P2pkh::new( + client.clone(), + format!("{base_path}_p2pkh"), + ), + p2sh: MetricsTree_Indexes_Address_P2sh::new( + client.clone(), + format!("{base_path}_p2sh"), + ), + p2tr: MetricsTree_Indexes_Address_P2tr::new( + client.clone(), + format!("{base_path}_p2tr"), + ), + p2wpkh: MetricsTree_Indexes_Address_P2wpkh::new( + client.clone(), + format!("{base_path}_p2wpkh"), + ), + p2wsh: MetricsTree_Indexes_Address_P2wsh::new( + client.clone(), + format!("{base_path}_p2wsh"), + ), + unknown: MetricsTree_Indexes_Address_Unknown::new( + client.clone(), + format!("{base_path}_unknown"), + ), } } } @@ -4144,12 +6132,24 @@ impl MetricsTree_Market { Self { ath: MetricsTree_Market_Ath::new(client.clone(), format!("{base_path}_ath")), dca: MetricsTree_Market_Dca::new(client.clone(), format!("{base_path}_dca")), - indicators: MetricsTree_Market_Indicators::new(client.clone(), format!("{base_path}_indicators")), + indicators: MetricsTree_Market_Indicators::new( + client.clone(), + format!("{base_path}_indicators"), + ), lookback: LookbackPattern::new(client.clone(), "price".to_string()), - moving_average: MetricsTree_Market_MovingAverage::new(client.clone(), format!("{base_path}_moving_average")), + moving_average: MetricsTree_Market_MovingAverage::new( + client.clone(), + format!("{base_path}_moving_average"), + ), range: MetricsTree_Market_Range::new(client.clone(), format!("{base_path}_range")), - returns: MetricsTree_Market_Returns::new(client.clone(), format!("{base_path}_returns")), - volatility: MetricsTree_Market_Volatility::new(client.clone(), format!("{base_path}_volatility")), + returns: MetricsTree_Market_Returns::new( + client.clone(), + format!("{base_path}_returns"), + ), + volatility: MetricsTree_Market_Volatility::new( + client.clone(), + format!("{base_path}_volatility"), + ), } } } @@ -4167,20 +6167,32 @@ pub struct MetricsTree_Market_Ath { impl MetricsTree_Market_Ath { pub fn new(client: Arc, base_path: String) -> Self { Self { - days_since_price_ath: MetricPattern4::new(client.clone(), "days_since_price_ath".to_string()), - max_days_between_price_aths: MetricPattern4::new(client.clone(), "max_days_between_price_aths".to_string()), - max_years_between_price_aths: MetricPattern4::new(client.clone(), "max_years_between_price_aths".to_string()), + days_since_price_ath: MetricPattern4::new( + client.clone(), + "days_since_price_ath".to_string(), + ), + max_days_between_price_aths: MetricPattern4::new( + client.clone(), + "max_days_between_price_aths".to_string(), + ), + max_years_between_price_aths: MetricPattern4::new( + client.clone(), + "max_years_between_price_aths".to_string(), + ), price_ath: MetricPattern1::new(client.clone(), "price_ath".to_string()), price_drawdown: MetricPattern3::new(client.clone(), "price_drawdown".to_string()), - years_since_price_ath: MetricPattern4::new(client.clone(), "years_since_price_ath".to_string()), + years_since_price_ath: MetricPattern4::new( + client.clone(), + "years_since_price_ath".to_string(), + ), } } } /// Metrics tree node. pub struct MetricsTree_Market_Dca { - pub class_average_price: MetricsTree_Market_Dca_ClassAveragePrice, - pub class_returns: ClassAveragePricePattern, + pub class_average_price: ClassAveragePricePattern, + pub class_returns: MetricsTree_Market_Dca_ClassReturns, pub class_stack: MetricsTree_Market_Dca_ClassStack, pub period_average_price: PeriodAveragePricePattern, pub period_cagr: PeriodCagrPattern, @@ -4192,47 +6204,65 @@ pub struct MetricsTree_Market_Dca { impl MetricsTree_Market_Dca { pub fn new(client: Arc, base_path: String) -> Self { Self { - class_average_price: MetricsTree_Market_Dca_ClassAveragePrice::new(client.clone(), format!("{base_path}_class_average_price")), - class_returns: ClassAveragePricePattern::new(client.clone(), "dca_class".to_string()), - class_stack: MetricsTree_Market_Dca_ClassStack::new(client.clone(), format!("{base_path}_class_stack")), - period_average_price: PeriodAveragePricePattern::new(client.clone(), "dca_average_price".to_string()), + class_average_price: ClassAveragePricePattern::new( + client.clone(), + "dca_class".to_string(), + ), + class_returns: MetricsTree_Market_Dca_ClassReturns::new( + client.clone(), + format!("{base_path}_class_returns"), + ), + class_stack: MetricsTree_Market_Dca_ClassStack::new( + client.clone(), + format!("{base_path}_class_stack"), + ), + period_average_price: PeriodAveragePricePattern::new( + client.clone(), + "dca_average_price".to_string(), + ), period_cagr: PeriodCagrPattern::new(client.clone(), "dca_cagr".to_string()), - period_lump_sum_stack: PeriodLumpSumStackPattern::new(client.clone(), "lump_sum_stack".to_string()), - period_returns: PeriodAveragePricePattern::new(client.clone(), "dca_returns".to_string()), + period_lump_sum_stack: PeriodLumpSumStackPattern::new( + client.clone(), + "lump_sum_stack".to_string(), + ), + period_returns: PeriodAveragePricePattern::new( + client.clone(), + "dca_returns".to_string(), + ), period_stack: PeriodLumpSumStackPattern::new(client.clone(), "dca_stack".to_string()), } } } /// Metrics tree node. -pub struct MetricsTree_Market_Dca_ClassAveragePrice { - pub _2015: MetricPattern4, - pub _2016: MetricPattern4, - pub _2017: MetricPattern4, - pub _2018: MetricPattern4, - pub _2019: MetricPattern4, - pub _2020: MetricPattern4, - pub _2021: MetricPattern4, - pub _2022: MetricPattern4, - pub _2023: MetricPattern4, - pub _2024: MetricPattern4, - pub _2025: MetricPattern4, +pub struct MetricsTree_Market_Dca_ClassReturns { + pub _2015: MetricPattern4, + pub _2016: MetricPattern4, + pub _2017: MetricPattern4, + pub _2018: MetricPattern4, + pub _2019: MetricPattern4, + pub _2020: MetricPattern4, + pub _2021: MetricPattern4, + pub _2022: MetricPattern4, + pub _2023: MetricPattern4, + pub _2024: MetricPattern4, + pub _2025: MetricPattern4, } -impl MetricsTree_Market_Dca_ClassAveragePrice { +impl MetricsTree_Market_Dca_ClassReturns { pub fn new(client: Arc, base_path: String) -> Self { Self { - _2015: MetricPattern4::new(client.clone(), "dca_class_2015_average_price".to_string()), - _2016: MetricPattern4::new(client.clone(), "dca_class_2016_average_price".to_string()), - _2017: MetricPattern4::new(client.clone(), "dca_class_2017_average_price".to_string()), - _2018: MetricPattern4::new(client.clone(), "dca_class_2018_average_price".to_string()), - _2019: MetricPattern4::new(client.clone(), "dca_class_2019_average_price".to_string()), - _2020: MetricPattern4::new(client.clone(), "dca_class_2020_average_price".to_string()), - _2021: MetricPattern4::new(client.clone(), "dca_class_2021_average_price".to_string()), - _2022: MetricPattern4::new(client.clone(), "dca_class_2022_average_price".to_string()), - _2023: MetricPattern4::new(client.clone(), "dca_class_2023_average_price".to_string()), - _2024: MetricPattern4::new(client.clone(), "dca_class_2024_average_price".to_string()), - _2025: MetricPattern4::new(client.clone(), "dca_class_2025_average_price".to_string()), + _2015: MetricPattern4::new(client.clone(), "dca_class_2015_returns".to_string()), + _2016: MetricPattern4::new(client.clone(), "dca_class_2016_returns".to_string()), + _2017: MetricPattern4::new(client.clone(), "dca_class_2017_returns".to_string()), + _2018: MetricPattern4::new(client.clone(), "dca_class_2018_returns".to_string()), + _2019: MetricPattern4::new(client.clone(), "dca_class_2019_returns".to_string()), + _2020: MetricPattern4::new(client.clone(), "dca_class_2020_returns".to_string()), + _2021: MetricPattern4::new(client.clone(), "dca_class_2021_returns".to_string()), + _2022: MetricPattern4::new(client.clone(), "dca_class_2022_returns".to_string()), + _2023: MetricPattern4::new(client.clone(), "dca_class_2023_returns".to_string()), + _2024: MetricPattern4::new(client.clone(), "dca_class_2024_returns".to_string()), + _2025: MetricPattern4::new(client.clone(), "dca_class_2025_returns".to_string()), } } } @@ -4306,8 +6336,14 @@ impl MetricsTree_Market_Indicators { rsi_14d: MetricPattern6::new(client.clone(), "rsi_14d".to_string()), rsi_14d_max: MetricPattern6::new(client.clone(), "rsi_14d_max".to_string()), rsi_14d_min: MetricPattern6::new(client.clone(), "rsi_14d_min".to_string()), - rsi_average_gain_14d: MetricPattern6::new(client.clone(), "rsi_average_gain_14d".to_string()), - rsi_average_loss_14d: MetricPattern6::new(client.clone(), "rsi_average_loss_14d".to_string()), + rsi_average_gain_14d: MetricPattern6::new( + client.clone(), + "rsi_average_gain_14d".to_string(), + ), + rsi_average_loss_14d: MetricPattern6::new( + client.clone(), + "rsi_average_loss_14d".to_string(), + ), rsi_gains: MetricPattern6::new(client.clone(), "rsi_gains".to_string()), rsi_losses: MetricPattern6::new(client.clone(), "rsi_losses".to_string()), stoch_d: MetricPattern6::new(client.clone(), "stoch_d".to_string()), @@ -4375,8 +6411,14 @@ impl MetricsTree_Market_MovingAverage { price_1y_sma: Price111dSmaPattern::new(client.clone(), "price_1y_sma".to_string()), price_200d_ema: Price111dSmaPattern::new(client.clone(), "price_200d_ema".to_string()), price_200d_sma: Price111dSmaPattern::new(client.clone(), "price_200d_sma".to_string()), - price_200d_sma_x0_8: MetricPattern4::new(client.clone(), "price_200d_sma_x0_8".to_string()), - price_200d_sma_x2_4: MetricPattern4::new(client.clone(), "price_200d_sma_x2_4".to_string()), + price_200d_sma_x0_8: MetricPattern4::new( + client.clone(), + "price_200d_sma_x0_8".to_string(), + ), + price_200d_sma_x2_4: MetricPattern4::new( + client.clone(), + "price_200d_sma_x2_4".to_string(), + ), price_200w_ema: Price111dSmaPattern::new(client.clone(), "price_200w_ema".to_string()), price_200w_sma: Price111dSmaPattern::new(client.clone(), "price_200w_sma".to_string()), price_21d_ema: Price111dSmaPattern::new(client.clone(), "price_21d_ema".to_string()), @@ -4424,11 +6466,17 @@ impl MetricsTree_Market_Range { price_1w_min: MetricPattern4::new(client.clone(), "price_1w_min".to_string()), price_1y_max: MetricPattern4::new(client.clone(), "price_1y_max".to_string()), price_1y_min: MetricPattern4::new(client.clone(), "price_1y_min".to_string()), - price_2w_choppiness_index: MetricPattern4::new(client.clone(), "price_2w_choppiness_index".to_string()), + price_2w_choppiness_index: MetricPattern4::new( + client.clone(), + "price_2w_choppiness_index".to_string(), + ), price_2w_max: MetricPattern4::new(client.clone(), "price_2w_max".to_string()), price_2w_min: MetricPattern4::new(client.clone(), "price_2w_min".to_string()), price_true_range: MetricPattern6::new(client.clone(), "price_true_range".to_string()), - price_true_range_2w_sum: MetricPattern6::new(client.clone(), "price_true_range_2w_sum".to_string()), + price_true_range_2w_sum: MetricPattern6::new( + client.clone(), + "price_true_range_2w_sum".to_string(), + ), } } } @@ -4449,15 +6497,36 @@ pub struct MetricsTree_Market_Returns { impl MetricsTree_Market_Returns { pub fn new(client: Arc, base_path: String) -> Self { Self { - _1d_returns_1m_sd: _1dReturns1mSdPattern::new(client.clone(), "1d_returns_1m_sd".to_string()), - _1d_returns_1w_sd: _1dReturns1mSdPattern::new(client.clone(), "1d_returns_1w_sd".to_string()), - _1d_returns_1y_sd: _1dReturns1mSdPattern::new(client.clone(), "1d_returns_1y_sd".to_string()), + _1d_returns_1m_sd: _1dReturns1mSdPattern::new( + client.clone(), + "1d_returns_1m_sd".to_string(), + ), + _1d_returns_1w_sd: _1dReturns1mSdPattern::new( + client.clone(), + "1d_returns_1w_sd".to_string(), + ), + _1d_returns_1y_sd: _1dReturns1mSdPattern::new( + client.clone(), + "1d_returns_1y_sd".to_string(), + ), cagr: PeriodCagrPattern::new(client.clone(), "cagr".to_string()), - downside_1m_sd: _1dReturns1mSdPattern::new(client.clone(), "downside_1m_sd".to_string()), - downside_1w_sd: _1dReturns1mSdPattern::new(client.clone(), "downside_1w_sd".to_string()), - downside_1y_sd: _1dReturns1mSdPattern::new(client.clone(), "downside_1y_sd".to_string()), + downside_1m_sd: _1dReturns1mSdPattern::new( + client.clone(), + "downside_1m_sd".to_string(), + ), + downside_1w_sd: _1dReturns1mSdPattern::new( + client.clone(), + "downside_1w_sd".to_string(), + ), + downside_1y_sd: _1dReturns1mSdPattern::new( + client.clone(), + "downside_1y_sd".to_string(), + ), downside_returns: MetricPattern6::new(client.clone(), "downside_returns".to_string()), - price_returns: MetricsTree_Market_Returns_PriceReturns::new(client.clone(), format!("{base_path}_price_returns")), + price_returns: MetricsTree_Market_Returns_PriceReturns::new( + client.clone(), + format!("{base_path}_price_returns"), + ), } } } @@ -4515,9 +6584,18 @@ pub struct MetricsTree_Market_Volatility { impl MetricsTree_Market_Volatility { pub fn new(client: Arc, base_path: String) -> Self { Self { - price_1m_volatility: MetricPattern4::new(client.clone(), "price_1m_volatility".to_string()), - price_1w_volatility: MetricPattern4::new(client.clone(), "price_1w_volatility".to_string()), - price_1y_volatility: MetricPattern4::new(client.clone(), "price_1y_volatility".to_string()), + price_1m_volatility: MetricPattern4::new( + client.clone(), + "price_1m_volatility".to_string(), + ), + price_1w_volatility: MetricPattern4::new( + client.clone(), + "price_1w_volatility".to_string(), + ), + price_1y_volatility: MetricPattern4::new( + client.clone(), + "price_1y_volatility".to_string(), + ), sharpe_1m: MetricPattern6::new(client.clone(), "sharpe_1m".to_string()), sharpe_1w: MetricPattern6::new(client.clone(), "sharpe_1w".to_string()), sharpe_1y: MetricPattern6::new(client.clone(), "sharpe_1y".to_string()), @@ -4772,7 +6850,10 @@ impl MetricsTree_Pools_Vecs { binancepool: AaopoolPattern::new(client.clone(), "binancepool".to_string()), bitalo: AaopoolPattern::new(client.clone(), "bitalo".to_string()), bitclub: AaopoolPattern::new(client.clone(), "bitclub".to_string()), - bitcoinaffiliatenetwork: AaopoolPattern::new(client.clone(), "bitcoinaffiliatenetwork".to_string()), + bitcoinaffiliatenetwork: AaopoolPattern::new( + client.clone(), + "bitcoinaffiliatenetwork".to_string(), + ), bitcoincom: AaopoolPattern::new(client.clone(), "bitcoincom".to_string()), bitcoinindia: AaopoolPattern::new(client.clone(), "bitcoinindia".to_string()), bitcoinrussia: AaopoolPattern::new(client.clone(), "bitcoinrussia".to_string()), @@ -4818,13 +6899,19 @@ impl MetricsTree_Pools_Vecs { ekanembtc: AaopoolPattern::new(client.clone(), "ekanembtc".to_string()), eligius: AaopoolPattern::new(client.clone(), "eligius".to_string()), emcdpool: AaopoolPattern::new(client.clone(), "emcdpool".to_string()), - entrustcharitypool: AaopoolPattern::new(client.clone(), "entrustcharitypool".to_string()), + entrustcharitypool: AaopoolPattern::new( + client.clone(), + "entrustcharitypool".to_string(), + ), eobot: AaopoolPattern::new(client.clone(), "eobot".to_string()), exxbw: AaopoolPattern::new(client.clone(), "exxbw".to_string()), f2pool: AaopoolPattern::new(client.clone(), "f2pool".to_string()), fiftyeightcoin: AaopoolPattern::new(client.clone(), "fiftyeightcoin".to_string()), foundryusa: AaopoolPattern::new(client.clone(), "foundryusa".to_string()), - futurebitapollosolo: AaopoolPattern::new(client.clone(), "futurebitapollosolo".to_string()), + futurebitapollosolo: AaopoolPattern::new( + client.clone(), + "futurebitapollosolo".to_string(), + ), gbminers: AaopoolPattern::new(client.clone(), "gbminers".to_string()), ghashio: AaopoolPattern::new(client.clone(), "ghashio".to_string()), givemecoins: AaopoolPattern::new(client.clone(), "givemecoins".to_string()), @@ -4905,7 +6992,10 @@ impl MetricsTree_Pools_Vecs { tiger: AaopoolPattern::new(client.clone(), "tiger".to_string()), tigerpoolnet: AaopoolPattern::new(client.clone(), "tigerpoolnet".to_string()), titan: AaopoolPattern::new(client.clone(), "titan".to_string()), - transactioncoinmining: AaopoolPattern::new(client.clone(), "transactioncoinmining".to_string()), + transactioncoinmining: AaopoolPattern::new( + client.clone(), + "transactioncoinmining".to_string(), + ), trickysbtcpool: AaopoolPattern::new(client.clone(), "trickysbtcpool".to_string()), triplemining: AaopoolPattern::new(client.clone(), "triplemining".to_string()), twentyoneinc: AaopoolPattern::new(client.clone(), "twentyoneinc".to_string()), @@ -5024,30 +7114,87 @@ pub struct MetricsTree_Price_Oracle { impl MetricsTree_Price_Oracle { pub fn new(client: Arc, base_path: String) -> Self { Self { - height_to_first_pairoutputindex: MetricPattern11::new(client.clone(), "height_to_first_pairoutputindex".to_string()), + height_to_first_pairoutputindex: MetricPattern11::new( + client.clone(), + "height_to_first_pairoutputindex".to_string(), + ), ohlc_cents: MetricPattern6::new(client.clone(), "oracle_ohlc_cents".to_string()), ohlc_dollars: MetricPattern6::new(client.clone(), "oracle_ohlc".to_string()), output0_value: MetricPattern33::new(client.clone(), "pair_output0_value".to_string()), output1_value: MetricPattern33::new(client.clone(), "pair_output1_value".to_string()), - pairoutputindex_to_txindex: MetricPattern33::new(client.clone(), "pairoutputindex_to_txindex".to_string()), - phase_daily_cents: PhaseDailyCentsPattern::new(client.clone(), "phase_daily".to_string()), - phase_daily_dollars: PhaseDailyCentsPattern::new(client.clone(), "phase_daily_dollars".to_string()), + pairoutputindex_to_txindex: MetricPattern33::new( + client.clone(), + "pairoutputindex_to_txindex".to_string(), + ), + phase_daily_cents: PhaseDailyCentsPattern::new( + client.clone(), + "phase_daily".to_string(), + ), + phase_daily_dollars: PhaseDailyCentsPattern::new( + client.clone(), + "phase_daily_dollars".to_string(), + ), phase_histogram: MetricPattern11::new(client.clone(), "phase_histogram".to_string()), - phase_price_cents: MetricPattern11::new(client.clone(), "phase_price_cents".to_string()), - phase_v2_daily_cents: PhaseDailyCentsPattern::new(client.clone(), "phase_v2_daily".to_string()), - phase_v2_daily_dollars: PhaseDailyCentsPattern::new(client.clone(), "phase_v2_daily_dollars".to_string()), - phase_v2_histogram: MetricPattern11::new(client.clone(), "phase_v2_histogram".to_string()), - phase_v2_peak_daily_cents: PhaseDailyCentsPattern::new(client.clone(), "phase_v2_peak_daily".to_string()), - phase_v2_peak_daily_dollars: PhaseDailyCentsPattern::new(client.clone(), "phase_v2_peak_daily_dollars".to_string()), - phase_v2_peak_price_cents: MetricPattern11::new(client.clone(), "phase_v2_peak_price_cents".to_string()), - phase_v2_price_cents: MetricPattern11::new(client.clone(), "phase_v2_price_cents".to_string()), - phase_v3_daily_cents: PhaseDailyCentsPattern::new(client.clone(), "phase_v3_daily".to_string()), - phase_v3_daily_dollars: PhaseDailyCentsPattern::new(client.clone(), "phase_v3_daily_dollars".to_string()), - phase_v3_histogram: MetricPattern11::new(client.clone(), "phase_v3_histogram".to_string()), - phase_v3_peak_daily_cents: PhaseDailyCentsPattern::new(client.clone(), "phase_v3_peak_daily".to_string()), - phase_v3_peak_daily_dollars: PhaseDailyCentsPattern::new(client.clone(), "phase_v3_peak_daily_dollars".to_string()), - phase_v3_peak_price_cents: MetricPattern11::new(client.clone(), "phase_v3_peak_price_cents".to_string()), - phase_v3_price_cents: MetricPattern11::new(client.clone(), "phase_v3_price_cents".to_string()), + phase_price_cents: MetricPattern11::new( + client.clone(), + "phase_price_cents".to_string(), + ), + phase_v2_daily_cents: PhaseDailyCentsPattern::new( + client.clone(), + "phase_v2_daily".to_string(), + ), + phase_v2_daily_dollars: PhaseDailyCentsPattern::new( + client.clone(), + "phase_v2_daily_dollars".to_string(), + ), + phase_v2_histogram: MetricPattern11::new( + client.clone(), + "phase_v2_histogram".to_string(), + ), + phase_v2_peak_daily_cents: PhaseDailyCentsPattern::new( + client.clone(), + "phase_v2_peak_daily".to_string(), + ), + phase_v2_peak_daily_dollars: PhaseDailyCentsPattern::new( + client.clone(), + "phase_v2_peak_daily_dollars".to_string(), + ), + phase_v2_peak_price_cents: MetricPattern11::new( + client.clone(), + "phase_v2_peak_price_cents".to_string(), + ), + phase_v2_price_cents: MetricPattern11::new( + client.clone(), + "phase_v2_price_cents".to_string(), + ), + phase_v3_daily_cents: PhaseDailyCentsPattern::new( + client.clone(), + "phase_v3_daily".to_string(), + ), + phase_v3_daily_dollars: PhaseDailyCentsPattern::new( + client.clone(), + "phase_v3_daily_dollars".to_string(), + ), + phase_v3_histogram: MetricPattern11::new( + client.clone(), + "phase_v3_histogram".to_string(), + ), + phase_v3_peak_daily_cents: PhaseDailyCentsPattern::new( + client.clone(), + "phase_v3_peak_daily".to_string(), + ), + phase_v3_peak_daily_dollars: PhaseDailyCentsPattern::new( + client.clone(), + "phase_v3_peak_daily_dollars".to_string(), + ), + phase_v3_peak_price_cents: MetricPattern11::new( + client.clone(), + "phase_v3_peak_price_cents".to_string(), + ), + phase_v3_price_cents: MetricPattern11::new( + client.clone(), + "phase_v3_price_cents".to_string(), + ), price_cents: MetricPattern11::new(client.clone(), "oracle_price_cents".to_string()), tx_count: MetricPattern6::new(client.clone(), "oracle_tx_count".to_string()), } @@ -5088,10 +7235,22 @@ impl MetricsTree_Scripts { Self { count: MetricsTree_Scripts_Count::new(client.clone(), format!("{base_path}_count")), empty_to_txindex: MetricPattern9::new(client.clone(), "txindex".to_string()), - first_emptyoutputindex: MetricPattern11::new(client.clone(), "first_emptyoutputindex".to_string()), - first_opreturnindex: MetricPattern11::new(client.clone(), "first_opreturnindex".to_string()), - first_p2msoutputindex: MetricPattern11::new(client.clone(), "first_p2msoutputindex".to_string()), - first_unknownoutputindex: MetricPattern11::new(client.clone(), "first_unknownoutputindex".to_string()), + first_emptyoutputindex: MetricPattern11::new( + client.clone(), + "first_emptyoutputindex".to_string(), + ), + first_opreturnindex: MetricPattern11::new( + client.clone(), + "first_opreturnindex".to_string(), + ), + first_p2msoutputindex: MetricPattern11::new( + client.clone(), + "first_p2msoutputindex".to_string(), + ), + first_unknownoutputindex: MetricPattern11::new( + client.clone(), + "first_unknownoutputindex".to_string(), + ), opreturn_to_txindex: MetricPattern14::new(client.clone(), "txindex".to_string()), p2ms_to_txindex: MetricPattern17::new(client.clone(), "txindex".to_string()), unknown_to_txindex: MetricPattern28::new(client.clone(), "txindex".to_string()), @@ -5134,8 +7293,14 @@ impl MetricsTree_Scripts_Count { p2wpkh: DollarsPattern::new(client.clone(), "p2wpkh_count".to_string()), p2wsh: DollarsPattern::new(client.clone(), "p2wsh_count".to_string()), segwit: DollarsPattern::new(client.clone(), "segwit_count".to_string()), - segwit_adoption: SegwitAdoptionPattern::new(client.clone(), "segwit_adoption".to_string()), - taproot_adoption: SegwitAdoptionPattern::new(client.clone(), "taproot_adoption".to_string()), + segwit_adoption: SegwitAdoptionPattern::new( + client.clone(), + "segwit_adoption".to_string(), + ), + taproot_adoption: SegwitAdoptionPattern::new( + client.clone(), + "taproot_adoption".to_string(), + ), unknownoutput: DollarsPattern::new(client.clone(), "unknownoutput_count".to_string()), } } @@ -5167,10 +7332,16 @@ impl MetricsTree_Supply { pub fn new(client: Arc, base_path: String) -> Self { Self { burned: MetricsTree_Supply_Burned::new(client.clone(), format!("{base_path}_burned")), - circulating: MetricsTree_Supply_Circulating::new(client.clone(), format!("{base_path}_circulating")), + circulating: MetricsTree_Supply_Circulating::new( + client.clone(), + format!("{base_path}_circulating"), + ), inflation: MetricPattern4::new(client.clone(), "inflation_rate".to_string()), market_cap: MetricPattern1::new(client.clone(), "market_cap".to_string()), - velocity: MetricsTree_Supply_Velocity::new(client.clone(), format!("{base_path}_velocity")), + velocity: MetricsTree_Supply_Velocity::new( + client.clone(), + format!("{base_path}_velocity"), + ), } } } @@ -5185,7 +7356,10 @@ impl MetricsTree_Supply_Burned { pub fn new(client: Arc, base_path: String) -> Self { Self { opreturn: UnclaimedRewardsPattern::new(client.clone(), "opreturn_supply".to_string()), - unspendable: UnclaimedRewardsPattern::new(client.clone(), "unspendable_supply".to_string()), + unspendable: UnclaimedRewardsPattern::new( + client.clone(), + "unspendable_supply".to_string(), + ), } } } @@ -5245,20 +7419,32 @@ impl MetricsTree_Transactions { pub fn new(client: Arc, base_path: String) -> Self { Self { base_size: MetricPattern27::new(client.clone(), "base_size".to_string()), - count: MetricsTree_Transactions_Count::new(client.clone(), format!("{base_path}_count")), + count: MetricsTree_Transactions_Count::new( + client.clone(), + format!("{base_path}_count"), + ), fees: MetricsTree_Transactions_Fees::new(client.clone(), format!("{base_path}_fees")), first_txindex: MetricPattern11::new(client.clone(), "first_txindex".to_string()), first_txinindex: MetricPattern27::new(client.clone(), "first_txinindex".to_string()), first_txoutindex: MetricPattern27::new(client.clone(), "first_txoutindex".to_string()), height: MetricPattern27::new(client.clone(), "height".to_string()), - is_explicitly_rbf: MetricPattern27::new(client.clone(), "is_explicitly_rbf".to_string()), + is_explicitly_rbf: MetricPattern27::new( + client.clone(), + "is_explicitly_rbf".to_string(), + ), rawlocktime: MetricPattern27::new(client.clone(), "rawlocktime".to_string()), size: MetricsTree_Transactions_Size::new(client.clone(), format!("{base_path}_size")), total_size: MetricPattern27::new(client.clone(), "total_size".to_string()), txid: MetricPattern27::new(client.clone(), "txid".to_string()), txversion: MetricPattern27::new(client.clone(), "txversion".to_string()), - versions: MetricsTree_Transactions_Versions::new(client.clone(), format!("{base_path}_versions")), - volume: MetricsTree_Transactions_Volume::new(client.clone(), format!("{base_path}_volume")), + versions: MetricsTree_Transactions_Versions::new( + client.clone(), + format!("{base_path}_versions"), + ), + volume: MetricsTree_Transactions_Volume::new( + client.clone(), + format!("{base_path}_volume"), + ), } } } @@ -5309,7 +7495,10 @@ impl MetricsTree_Transactions_Fees_Fee { pub fn new(client: Arc, base_path: String) -> Self { Self { bitcoin: CountPattern2::new(client.clone(), "fee_btc".to_string()), - dollars: MetricsTree_Transactions_Fees_Fee_Dollars::new(client.clone(), format!("{base_path}_dollars")), + dollars: MetricsTree_Transactions_Fees_Fee_Dollars::new( + client.clone(), + format!("{base_path}_dollars"), + ), sats: CountPattern2::new(client.clone(), "fee".to_string()), txindex: MetricPattern27::new(client.clone(), "fee".to_string()), } @@ -5336,7 +7525,10 @@ impl MetricsTree_Transactions_Fees_Fee_Dollars { Self { average: MetricPattern1::new(client.clone(), "fee_usd_average".to_string()), cumulative: MetricPattern2::new(client.clone(), "fee_usd_cumulative".to_string()), - height_cumulative: MetricPattern11::new(client.clone(), "fee_usd_cumulative".to_string()), + height_cumulative: MetricPattern11::new( + client.clone(), + "fee_usd_cumulative".to_string(), + ), max: MetricPattern1::new(client.clone(), "fee_usd_max".to_string()), median: MetricPattern11::new(client.clone(), "fee_usd_median".to_string()), min: MetricPattern1::new(client.clone(), "fee_usd_min".to_string()), @@ -5442,12 +7634,12 @@ impl BrkClient { /// .last(10) /// .json::()?; /// ``` - pub fn metric(&self, metric: impl Into, index: Index) -> MetricEndpointBuilder { - MetricEndpointBuilder::new( - self.base.clone(), - Arc::from(metric.into().as_str()), - index, - ) + pub fn metric( + &self, + metric: impl Into, + index: Index, + ) -> MetricEndpointBuilder { + MetricEndpointBuilder::new(self.base.clone(), Arc::from(metric.into().as_str()), index) } /// Compact OpenAPI specification @@ -5477,11 +7669,24 @@ impl BrkClient { /// *[Mempool.space docs](https://mempool.space/docs/api/rest#get-address-transactions)* /// /// Endpoint: `GET /api/address/{address}/txs` - pub fn get_address_txs(&self, address: Address, after_txid: Option<&str>, limit: Option) -> Result> { + pub fn get_address_txs( + &self, + address: Address, + after_txid: Option<&str>, + limit: Option, + ) -> Result> { let mut query = Vec::new(); - if let Some(v) = after_txid { query.push(format!("after_txid={}", v)); } - if let Some(v) = limit { query.push(format!("limit={}", v)); } - let query_str = if query.is_empty() { String::new() } else { format!("?{}", query.join("&")) }; + if let Some(v) = after_txid { + query.push(format!("after_txid={}", v)); + } + if let Some(v) = limit { + query.push(format!("limit={}", v)); + } + let query_str = if query.is_empty() { + String::new() + } else { + format!("?{}", query.join("&")) + }; let path = format!("/api/address/{address}/txs{}", query_str); self.base.get_json(&path) } @@ -5493,11 +7698,24 @@ impl BrkClient { /// *[Mempool.space docs](https://mempool.space/docs/api/rest#get-address-transactions-chain)* /// /// Endpoint: `GET /api/address/{address}/txs/chain` - pub fn get_address_confirmed_txs(&self, address: Address, after_txid: Option<&str>, limit: Option) -> Result> { + pub fn get_address_confirmed_txs( + &self, + address: Address, + after_txid: Option<&str>, + limit: Option, + ) -> Result> { let mut query = Vec::new(); - if let Some(v) = after_txid { query.push(format!("after_txid={}", v)); } - if let Some(v) = limit { query.push(format!("limit={}", v)); } - let query_str = if query.is_empty() { String::new() } else { format!("?{}", query.join("&")) }; + if let Some(v) = after_txid { + query.push(format!("after_txid={}", v)); + } + if let Some(v) = limit { + query.push(format!("limit={}", v)); + } + let query_str = if query.is_empty() { + String::new() + } else { + format!("?{}", query.join("&")) + }; let path = format!("/api/address/{address}/txs/chain{}", query_str); self.base.get_json(&path) } @@ -5510,7 +7728,8 @@ impl BrkClient { /// /// Endpoint: `GET /api/address/{address}/txs/mempool` pub fn get_address_mempool_txs(&self, address: Address) -> Result> { - self.base.get_json(&format!("/api/address/{address}/txs/mempool")) + self.base + .get_json(&format!("/api/address/{address}/txs/mempool")) } /// Address UTXOs @@ -5576,7 +7795,8 @@ impl BrkClient { /// /// Endpoint: `GET /api/block/{hash}/txid/{index}` pub fn get_block_txid(&self, hash: BlockHash, index: TxIndex) -> Result { - self.base.get_json(&format!("/api/block/{hash}/txid/{index}")) + self.base + .get_json(&format!("/api/block/{hash}/txid/{index}")) } /// Block transaction IDs @@ -5598,7 +7818,8 @@ impl BrkClient { /// /// Endpoint: `GET /api/block/{hash}/txs/{start_index}` pub fn get_block_txs(&self, hash: BlockHash, start_index: TxIndex) -> Result> { - self.base.get_json(&format!("/api/block/{hash}/txs/{start_index}")) + self.base + .get_json(&format!("/api/block/{hash}/txs/{start_index}")) } /// Recent blocks @@ -5659,14 +7880,38 @@ impl BrkClient { /// Fetch data for a specific metric at the given index. Use query parameters to filter by date range and format (json/csv). /// /// Endpoint: `GET /api/metric/{metric}/{index}` - pub fn get_metric(&self, metric: Metric, index: Index, start: Option, end: Option, limit: Option<&str>, format: Option) -> Result> { + pub fn get_metric( + &self, + metric: Metric, + index: Index, + start: Option, + end: Option, + limit: Option<&str>, + format: Option, + ) -> Result> { let mut query = Vec::new(); - if let Some(v) = start { query.push(format!("start={}", v)); } - if let Some(v) = end { query.push(format!("end={}", v)); } - if let Some(v) = limit { query.push(format!("limit={}", v)); } - if let Some(v) = format { query.push(format!("format={}", v)); } - let query_str = if query.is_empty() { String::new() } else { format!("?{}", query.join("&")) }; - let path = format!("/api/metric/{metric}/{}{}", index.serialize_long(), query_str); + if let Some(v) = start { + query.push(format!("start={}", v)); + } + if let Some(v) = end { + query.push(format!("end={}", v)); + } + if let Some(v) = limit { + query.push(format!("limit={}", v)); + } + if let Some(v) = format { + query.push(format!("format={}", v)); + } + let query_str = if query.is_empty() { + String::new() + } else { + format!("?{}", query.join("&")) + }; + let path = format!( + "/api/metric/{metric}/{}{}", + index.serialize_long(), + query_str + ); if format == Some(Format::CSV) { self.base.get_text(&path).map(FormatResponse::Csv) } else { @@ -5688,15 +7933,35 @@ impl BrkClient { /// Fetch multiple metrics in a single request. Supports filtering by index and date range. Returns an array of MetricData objects. For a single metric, use `get_metric` instead. /// /// Endpoint: `GET /api/metrics/bulk` - pub fn get_metrics(&self, metrics: Metrics, index: Index, start: Option, end: Option, limit: Option<&str>, format: Option) -> Result>> { + pub fn get_metrics( + &self, + metrics: Metrics, + index: Index, + start: Option, + end: Option, + limit: Option<&str>, + format: Option, + ) -> Result>> { let mut query = Vec::new(); query.push(format!("metrics={}", metrics)); query.push(format!("index={}", index)); - if let Some(v) = start { query.push(format!("start={}", v)); } - if let Some(v) = end { query.push(format!("end={}", v)); } - if let Some(v) = limit { query.push(format!("limit={}", v)); } - if let Some(v) = format { query.push(format!("format={}", v)); } - let query_str = if query.is_empty() { String::new() } else { format!("?{}", query.join("&")) }; + if let Some(v) = start { + query.push(format!("start={}", v)); + } + if let Some(v) = end { + query.push(format!("end={}", v)); + } + if let Some(v) = limit { + query.push(format!("limit={}", v)); + } + if let Some(v) = format { + query.push(format!("format={}", v)); + } + let query_str = if query.is_empty() { + String::new() + } else { + format!("?{}", query.join("&")) + }; let path = format!("/api/metrics/bulk{}", query_str); if format == Some(Format::CSV) { self.base.get_text(&path).map(FormatResponse::Csv) @@ -5730,8 +7995,14 @@ impl BrkClient { /// Endpoint: `GET /api/metrics/list` pub fn list_metrics(&self, page: Option) -> Result { let mut query = Vec::new(); - if let Some(v) = page { query.push(format!("page={}", v)); } - let query_str = if query.is_empty() { String::new() } else { format!("?{}", query.join("&")) }; + if let Some(v) = page { + query.push(format!("page={}", v)); + } + let query_str = if query.is_empty() { + String::new() + } else { + format!("?{}", query.join("&")) + }; let path = format!("/api/metrics/list{}", query_str); self.base.get_json(&path) } @@ -5743,8 +8014,14 @@ impl BrkClient { /// Endpoint: `GET /api/metrics/search/{metric}` pub fn search_metrics(&self, metric: Metric, limit: Option) -> Result> { let mut query = Vec::new(); - if let Some(v) = limit { query.push(format!("limit={}", v)); } - let query_str = if query.is_empty() { String::new() } else { format!("?{}", query.join("&")) }; + if let Some(v) = limit { + query.push(format!("limit={}", v)); + } + let query_str = if query.is_empty() { + String::new() + } else { + format!("?{}", query.join("&")) + }; let path = format!("/api/metrics/search/{metric}{}", query_str); self.base.get_json(&path) } @@ -5797,7 +8074,8 @@ impl BrkClient { /// /// Endpoint: `GET /api/tx/{txid}/outspend/{vout}` pub fn get_tx_outspend(&self, txid: Txid, vout: Vout) -> Result { - self.base.get_json(&format!("/api/tx/{txid}/outspend/{vout}")) + self.base + .get_json(&format!("/api/tx/{txid}/outspend/{vout}")) } /// All output spend statuses @@ -5830,7 +8108,8 @@ impl BrkClient { /// /// Endpoint: `GET /api/v1/difficulty-adjustment` pub fn get_difficulty_adjustment(&self) -> Result { - self.base.get_json(&format!("/api/v1/difficulty-adjustment")) + self.base + .get_json(&format!("/api/v1/difficulty-adjustment")) } /// Projected mempool blocks @@ -5863,7 +8142,8 @@ impl BrkClient { /// /// Endpoint: `GET /api/v1/mining/blocks/fee-rates/{time_period}` pub fn get_block_fee_rates(&self, time_period: TimePeriod) -> Result { - self.base.get_json(&format!("/api/v1/mining/blocks/fee-rates/{time_period}")) + self.base + .get_json(&format!("/api/v1/mining/blocks/fee-rates/{time_period}")) } /// Block fees @@ -5874,7 +8154,8 @@ impl BrkClient { /// /// Endpoint: `GET /api/v1/mining/blocks/fees/{time_period}` pub fn get_block_fees(&self, time_period: TimePeriod) -> Result> { - self.base.get_json(&format!("/api/v1/mining/blocks/fees/{time_period}")) + self.base + .get_json(&format!("/api/v1/mining/blocks/fees/{time_period}")) } /// Block rewards @@ -5885,7 +8166,8 @@ impl BrkClient { /// /// Endpoint: `GET /api/v1/mining/blocks/rewards/{time_period}` pub fn get_block_rewards(&self, time_period: TimePeriod) -> Result> { - self.base.get_json(&format!("/api/v1/mining/blocks/rewards/{time_period}")) + self.base + .get_json(&format!("/api/v1/mining/blocks/rewards/{time_period}")) } /// Block sizes and weights @@ -5896,7 +8178,9 @@ impl BrkClient { /// /// Endpoint: `GET /api/v1/mining/blocks/sizes-weights/{time_period}` pub fn get_block_sizes_weights(&self, time_period: TimePeriod) -> Result { - self.base.get_json(&format!("/api/v1/mining/blocks/sizes-weights/{time_period}")) + self.base.get_json(&format!( + "/api/v1/mining/blocks/sizes-weights/{time_period}" + )) } /// Block by timestamp @@ -5907,7 +8191,8 @@ impl BrkClient { /// /// Endpoint: `GET /api/v1/mining/blocks/timestamp/{timestamp}` pub fn get_block_by_timestamp(&self, timestamp: Timestamp) -> Result { - self.base.get_json(&format!("/api/v1/mining/blocks/timestamp/{timestamp}")) + self.base + .get_json(&format!("/api/v1/mining/blocks/timestamp/{timestamp}")) } /// Difficulty adjustments (all time) @@ -5918,7 +8203,8 @@ impl BrkClient { /// /// Endpoint: `GET /api/v1/mining/difficulty-adjustments` pub fn get_difficulty_adjustments(&self) -> Result> { - self.base.get_json(&format!("/api/v1/mining/difficulty-adjustments")) + self.base + .get_json(&format!("/api/v1/mining/difficulty-adjustments")) } /// Difficulty adjustments @@ -5928,8 +8214,13 @@ impl BrkClient { /// *[Mempool.space docs](https://mempool.space/docs/api/rest#get-difficulty-adjustments)* /// /// Endpoint: `GET /api/v1/mining/difficulty-adjustments/{time_period}` - pub fn get_difficulty_adjustments_by_period(&self, time_period: TimePeriod) -> Result> { - self.base.get_json(&format!("/api/v1/mining/difficulty-adjustments/{time_period}")) + pub fn get_difficulty_adjustments_by_period( + &self, + time_period: TimePeriod, + ) -> Result> { + self.base.get_json(&format!( + "/api/v1/mining/difficulty-adjustments/{time_period}" + )) } /// Network hashrate (all time) @@ -5951,7 +8242,8 @@ impl BrkClient { /// /// Endpoint: `GET /api/v1/mining/hashrate/{time_period}` pub fn get_hashrate_by_period(&self, time_period: TimePeriod) -> Result { - self.base.get_json(&format!("/api/v1/mining/hashrate/{time_period}")) + self.base + .get_json(&format!("/api/v1/mining/hashrate/{time_period}")) } /// Mining pool details @@ -5984,7 +8276,8 @@ impl BrkClient { /// /// Endpoint: `GET /api/v1/mining/pools/{time_period}` pub fn get_pool_stats(&self, time_period: TimePeriod) -> Result { - self.base.get_json(&format!("/api/v1/mining/pools/{time_period}")) + self.base + .get_json(&format!("/api/v1/mining/pools/{time_period}")) } /// Mining reward statistics @@ -5995,7 +8288,8 @@ impl BrkClient { /// /// Endpoint: `GET /api/v1/mining/reward-stats/{block_count}` pub fn get_reward_stats(&self, block_count: i64) -> Result { - self.base.get_json(&format!("/api/v1/mining/reward-stats/{block_count}")) + self.base + .get_json(&format!("/api/v1/mining/reward-stats/{block_count}")) } /// Validate address @@ -6006,7 +8300,8 @@ impl BrkClient { /// /// Endpoint: `GET /api/v1/validate-address/{address}` pub fn validate_address(&self, address: &str) -> Result { - self.base.get_json(&format!("/api/v1/validate-address/{address}")) + self.base + .get_json(&format!("/api/v1/validate-address/{address}")) } /// Health check @@ -6035,5 +8330,4 @@ impl BrkClient { pub fn get_version(&self) -> Result { self.base.get_json(&format!("/version")) } - } diff --git a/crates/brk_computer/src/internal/compute.rs b/crates/brk_computer/src/internal/compute.rs index c4eae97a1..3705b678d 100644 --- a/crates/brk_computer/src/internal/compute.rs +++ b/crates/brk_computer/src/internal/compute.rs @@ -307,84 +307,6 @@ where Ok(()) } -/// Compute cumulative extension from a source vec. -/// -/// Used when only cumulative needs to be extended from an existing source. -pub fn compute_cumulative( - max_from: I, - source: &impl IterableVec, - cumulative: &mut EagerVec>, - exit: &Exit, -) -> Result<()> -where - I: VecIndex, - T: ComputedVecValue + JsonSchema, -{ - cumulative.validate_computed_version_or_reset(source.version())?; - - let index = max_from.min(I::from(cumulative.len())); - - let mut cumulative_val = index - .decremented() - .map_or(T::from(0_usize), |idx| cumulative.iter().get_unwrap(idx)); - - source - .iter() - .enumerate() - .skip(index.to_usize()) - .try_for_each(|(i, v)| -> Result<()> { - cumulative_val += v; - cumulative.truncate_push_at(i, cumulative_val)?; - Ok(()) - })?; - - let _lock = exit.lock(); - cumulative.write()?; - - Ok(()) -} - -/// Compute cumulative from binary transform of two source vecs. -pub fn compute_cumulative_transform2( - max_from: I, - source1: &impl IterableVec, - source2: &impl IterableVec, - cumulative: &mut EagerVec>, - transform: F, - exit: &Exit, -) -> Result<()> -where - I: VecIndex, - T: ComputedVecValue + JsonSchema, - S1: VecValue, - S2: VecValue, - F: Fn(S1, S2) -> T, -{ - let combined_version = source1.version() + source2.version(); - cumulative.validate_computed_version_or_reset(combined_version)?; - - let index = max_from.min(I::from(cumulative.len())); - let target_len = source1.len().min(source2.len()); - - let mut cumulative_val = index - .decremented() - .map_or(T::from(0_usize), |idx| cumulative.read_unwrap_once(idx)); - - let mut iter1 = source1.iter(); - let mut iter2 = source2.iter(); - - for i in index.to_usize()..target_len { - let idx = I::from(i); - cumulative_val += transform(iter1.get_unwrap(idx), iter2.get_unwrap(idx)); - cumulative.truncate_push_at(i, cumulative_val)?; - } - - let _lock = exit.lock(); - cumulative.write()?; - - Ok(()) -} - /// Compute coarser aggregations from already-aggregated source data. /// /// This is used for dateindex → weekindex, monthindex, etc. where we derive diff --git a/crates/brk_computer/src/internal/multi/from_tx/value_dollars.rs b/crates/brk_computer/src/internal/multi/from_tx/value_dollars.rs index fd7315cb7..2fbb11bd7 100644 --- a/crates/brk_computer/src/internal/multi/from_tx/value_dollars.rs +++ b/crates/brk_computer/src/internal/multi/from_tx/value_dollars.rs @@ -16,11 +16,12 @@ use vecdb::{ }; use crate::{ - ComputeIndexes, indexes, + indexes, internal::{ CumulativeVec, Full, LazyBinaryTransformFull, LazyDateDerivedFull, LazyFull, - SatsTimesClosePrice, Stats, compute_cumulative, + SatsTimesClosePrice, Stats, }, + ComputeIndexes, }; /// Lazy dollars at TxIndex: `sats * price[height]` @@ -136,10 +137,9 @@ impl ValueDollarsFromTxFull { exit: &Exit, ) -> Result<()> { // Compute height cumulative by summing lazy height.sum values - compute_cumulative( + self.height_cumulative.0.compute_cumulative( starting_indexes.height, &self.height.sum, - &mut self.height_cumulative.0, exit, )?; diff --git a/crates/brk_computer/src/internal/multi/height_derived/full.rs b/crates/brk_computer/src/internal/multi/height_derived/full.rs index cfad9d267..f95f5160a 100644 --- a/crates/brk_computer/src/internal/multi/height_derived/full.rs +++ b/crates/brk_computer/src/internal/multi/height_derived/full.rs @@ -9,11 +9,11 @@ use schemars::JsonSchema; use vecdb::{Database, Exit, IterableBoxedVec, IterableCloneableVec, IterableVec}; use crate::{ - ComputeIndexes, indexes, + indexes, internal::{ ComputedVecValue, CumulativeVec, Full, LazyDateDerivedFull, LazyFull, NumericValue, - compute_cumulative, }, + ComputeIndexes, }; #[derive(Clone, Deref, DerefMut, Traversable)] @@ -102,6 +102,9 @@ where height_source: &impl IterableVec, exit: &Exit, ) -> Result<()> { - compute_cumulative(max_from, height_source, &mut self.height_cumulative.0, exit) + self.height_cumulative + .0 + .compute_cumulative(max_from, height_source, exit)?; + Ok(()) } } diff --git a/crates/brk_computer/src/internal/multi/height_derived/sum_cum.rs b/crates/brk_computer/src/internal/multi/height_derived/sum_cum.rs index dc43ed494..673f7072f 100644 --- a/crates/brk_computer/src/internal/multi/height_derived/sum_cum.rs +++ b/crates/brk_computer/src/internal/multi/height_derived/sum_cum.rs @@ -12,11 +12,11 @@ use vecdb::{ }; use crate::{ - ComputeIndexes, indexes, + indexes, internal::{ ComputedVecValue, CumulativeVec, LazyDateDerivedSumCum, LazySumCum, NumericValue, SumCum, - compute_cumulative, }, + ComputeIndexes, }; #[derive(Clone, Deref, DerefMut, Traversable)] @@ -99,7 +99,10 @@ where source: &impl IterableVec, exit: &Exit, ) -> Result<()> { - compute_cumulative(max_from, source, &mut self.height_cumulative.0, exit) + self.height_cumulative + .0 + .compute_cumulative(max_from, source, exit)?; + Ok(()) } fn compute_dateindex_sum_cum( diff --git a/modules/brk-client/index.js b/modules/brk-client/index.js index 055e81440..aec94d217 100644 --- a/modules/brk-client/index.js +++ b/modules/brk-client/index.js @@ -2032,17 +2032,17 @@ function createBitcoinPattern(client, acc) { */ function createClassAveragePricePattern(client, acc) { return { - _2015: createMetricPattern4(client, _m(acc, '2015_returns')), - _2016: createMetricPattern4(client, _m(acc, '2016_returns')), - _2017: createMetricPattern4(client, _m(acc, '2017_returns')), - _2018: createMetricPattern4(client, _m(acc, '2018_returns')), - _2019: createMetricPattern4(client, _m(acc, '2019_returns')), - _2020: createMetricPattern4(client, _m(acc, '2020_returns')), - _2021: createMetricPattern4(client, _m(acc, '2021_returns')), - _2022: createMetricPattern4(client, _m(acc, '2022_returns')), - _2023: createMetricPattern4(client, _m(acc, '2023_returns')), - _2024: createMetricPattern4(client, _m(acc, '2024_returns')), - _2025: createMetricPattern4(client, _m(acc, '2025_returns')), + _2015: createMetricPattern4(client, _m(acc, '2015_average_price')), + _2016: createMetricPattern4(client, _m(acc, '2016_average_price')), + _2017: createMetricPattern4(client, _m(acc, '2017_average_price')), + _2018: createMetricPattern4(client, _m(acc, '2018_average_price')), + _2019: createMetricPattern4(client, _m(acc, '2019_average_price')), + _2020: createMetricPattern4(client, _m(acc, '2020_average_price')), + _2021: createMetricPattern4(client, _m(acc, '2021_average_price')), + _2022: createMetricPattern4(client, _m(acc, '2022_average_price')), + _2023: createMetricPattern4(client, _m(acc, '2023_average_price')), + _2024: createMetricPattern4(client, _m(acc, '2024_average_price')), + _2025: createMetricPattern4(client, _m(acc, '2025_average_price')), }; } @@ -2085,41 +2085,6 @@ function createDollarsPattern(client, acc) { }; } -/** - * @typedef {Object} RelativePattern2 - * @property {MetricPattern1} negUnrealizedLossRelToOwnMarketCap - * @property {MetricPattern1} negUnrealizedLossRelToOwnTotalUnrealizedPnl - * @property {MetricPattern1} netUnrealizedPnlRelToOwnMarketCap - * @property {MetricPattern1} netUnrealizedPnlRelToOwnTotalUnrealizedPnl - * @property {MetricPattern1} supplyInLossRelToOwnSupply - * @property {MetricPattern1} supplyInProfitRelToOwnSupply - * @property {MetricPattern1} unrealizedLossRelToOwnMarketCap - * @property {MetricPattern1} unrealizedLossRelToOwnTotalUnrealizedPnl - * @property {MetricPattern1} unrealizedProfitRelToOwnMarketCap - * @property {MetricPattern1} unrealizedProfitRelToOwnTotalUnrealizedPnl - */ - -/** - * Create a RelativePattern2 pattern node - * @param {BrkClientBase} client - * @param {string} acc - Accumulated metric name - * @returns {RelativePattern2} - */ -function createRelativePattern2(client, acc) { - return { - negUnrealizedLossRelToOwnMarketCap: createMetricPattern1(client, _m(acc, 'neg_unrealized_loss_rel_to_own_market_cap')), - negUnrealizedLossRelToOwnTotalUnrealizedPnl: createMetricPattern1(client, _m(acc, 'neg_unrealized_loss_rel_to_own_total_unrealized_pnl')), - netUnrealizedPnlRelToOwnMarketCap: createMetricPattern1(client, _m(acc, 'net_unrealized_pnl_rel_to_own_market_cap')), - netUnrealizedPnlRelToOwnTotalUnrealizedPnl: createMetricPattern1(client, _m(acc, 'net_unrealized_pnl_rel_to_own_total_unrealized_pnl')), - supplyInLossRelToOwnSupply: createMetricPattern1(client, _m(acc, 'supply_in_loss_rel_to_own_supply')), - supplyInProfitRelToOwnSupply: createMetricPattern1(client, _m(acc, 'supply_in_profit_rel_to_own_supply')), - unrealizedLossRelToOwnMarketCap: createMetricPattern1(client, _m(acc, 'unrealized_loss_rel_to_own_market_cap')), - unrealizedLossRelToOwnTotalUnrealizedPnl: createMetricPattern1(client, _m(acc, 'unrealized_loss_rel_to_own_total_unrealized_pnl')), - unrealizedProfitRelToOwnMarketCap: createMetricPattern1(client, _m(acc, 'unrealized_profit_rel_to_own_market_cap')), - unrealizedProfitRelToOwnTotalUnrealizedPnl: createMetricPattern1(client, _m(acc, 'unrealized_profit_rel_to_own_total_unrealized_pnl')), - }; -} - /** * @typedef {Object} RelativePattern * @property {MetricPattern1} negUnrealizedLossRelToMarketCap @@ -2155,6 +2120,41 @@ function createRelativePattern(client, acc) { }; } +/** + * @typedef {Object} RelativePattern2 + * @property {MetricPattern1} negUnrealizedLossRelToOwnMarketCap + * @property {MetricPattern1} negUnrealizedLossRelToOwnTotalUnrealizedPnl + * @property {MetricPattern1} netUnrealizedPnlRelToOwnMarketCap + * @property {MetricPattern1} netUnrealizedPnlRelToOwnTotalUnrealizedPnl + * @property {MetricPattern1} supplyInLossRelToOwnSupply + * @property {MetricPattern1} supplyInProfitRelToOwnSupply + * @property {MetricPattern1} unrealizedLossRelToOwnMarketCap + * @property {MetricPattern1} unrealizedLossRelToOwnTotalUnrealizedPnl + * @property {MetricPattern1} unrealizedProfitRelToOwnMarketCap + * @property {MetricPattern1} unrealizedProfitRelToOwnTotalUnrealizedPnl + */ + +/** + * Create a RelativePattern2 pattern node + * @param {BrkClientBase} client + * @param {string} acc - Accumulated metric name + * @returns {RelativePattern2} + */ +function createRelativePattern2(client, acc) { + return { + negUnrealizedLossRelToOwnMarketCap: createMetricPattern1(client, _m(acc, 'neg_unrealized_loss_rel_to_own_market_cap')), + negUnrealizedLossRelToOwnTotalUnrealizedPnl: createMetricPattern1(client, _m(acc, 'neg_unrealized_loss_rel_to_own_total_unrealized_pnl')), + netUnrealizedPnlRelToOwnMarketCap: createMetricPattern1(client, _m(acc, 'net_unrealized_pnl_rel_to_own_market_cap')), + netUnrealizedPnlRelToOwnTotalUnrealizedPnl: createMetricPattern1(client, _m(acc, 'net_unrealized_pnl_rel_to_own_total_unrealized_pnl')), + supplyInLossRelToOwnSupply: createMetricPattern1(client, _m(acc, 'supply_in_loss_rel_to_own_supply')), + supplyInProfitRelToOwnSupply: createMetricPattern1(client, _m(acc, 'supply_in_profit_rel_to_own_supply')), + unrealizedLossRelToOwnMarketCap: createMetricPattern1(client, _m(acc, 'unrealized_loss_rel_to_own_market_cap')), + unrealizedLossRelToOwnTotalUnrealizedPnl: createMetricPattern1(client, _m(acc, 'unrealized_loss_rel_to_own_total_unrealized_pnl')), + unrealizedProfitRelToOwnMarketCap: createMetricPattern1(client, _m(acc, 'unrealized_profit_rel_to_own_market_cap')), + unrealizedProfitRelToOwnTotalUnrealizedPnl: createMetricPattern1(client, _m(acc, 'unrealized_profit_rel_to_own_total_unrealized_pnl')), + }; +} + /** * @template T * @typedef {Object} CountPattern2 @@ -2388,6 +2388,35 @@ function create_10yTo12yPattern(client, acc) { }; } +/** + * @typedef {Object} UnrealizedPattern + * @property {MetricPattern1} negUnrealizedLoss + * @property {MetricPattern1} netUnrealizedPnl + * @property {ActiveSupplyPattern} supplyInLoss + * @property {ActiveSupplyPattern} supplyInProfit + * @property {MetricPattern1} totalUnrealizedPnl + * @property {MetricPattern1} unrealizedLoss + * @property {MetricPattern1} unrealizedProfit + */ + +/** + * Create a UnrealizedPattern pattern node + * @param {BrkClientBase} client + * @param {string} acc - Accumulated metric name + * @returns {UnrealizedPattern} + */ +function createUnrealizedPattern(client, acc) { + return { + negUnrealizedLoss: createMetricPattern1(client, _m(acc, 'neg_unrealized_loss')), + netUnrealizedPnl: createMetricPattern1(client, _m(acc, 'net_unrealized_pnl')), + supplyInLoss: createActiveSupplyPattern(client, _m(acc, 'supply_in_loss')), + supplyInProfit: createActiveSupplyPattern(client, _m(acc, 'supply_in_profit')), + totalUnrealizedPnl: createMetricPattern1(client, _m(acc, 'total_unrealized_pnl')), + unrealizedLoss: createMetricPattern1(client, _m(acc, 'unrealized_loss')), + unrealizedProfit: createMetricPattern1(client, _m(acc, 'unrealized_profit')), + }; +} + /** * @typedef {Object} _10yPattern * @property {ActivityPattern2} activity @@ -2417,35 +2446,6 @@ function create_10yPattern(client, acc) { }; } -/** - * @typedef {Object} _0satsPattern2 - * @property {ActivityPattern2} activity - * @property {CostBasisPattern} costBasis - * @property {OutputsPattern} outputs - * @property {RealizedPattern} realized - * @property {RelativePattern4} relative - * @property {SupplyPattern2} supply - * @property {UnrealizedPattern} unrealized - */ - -/** - * Create a _0satsPattern2 pattern node - * @param {BrkClientBase} client - * @param {string} acc - Accumulated metric name - * @returns {_0satsPattern2} - */ -function create_0satsPattern2(client, acc) { - return { - activity: createActivityPattern2(client, acc), - costBasis: createCostBasisPattern(client, acc), - outputs: createOutputsPattern(client, _m(acc, 'utxo_count')), - realized: createRealizedPattern(client, acc), - relative: createRelativePattern4(client, _m(acc, 'supply_in')), - supply: createSupplyPattern2(client, _m(acc, 'supply')), - unrealized: createUnrealizedPattern(client, acc), - }; -} - /** * @typedef {Object} _100btcPattern * @property {ActivityPattern2} activity @@ -2475,35 +2475,6 @@ function create_100btcPattern(client, acc) { }; } -/** - * @typedef {Object} UnrealizedPattern - * @property {MetricPattern1} negUnrealizedLoss - * @property {MetricPattern1} netUnrealizedPnl - * @property {ActiveSupplyPattern} supplyInLoss - * @property {ActiveSupplyPattern} supplyInProfit - * @property {MetricPattern1} totalUnrealizedPnl - * @property {MetricPattern1} unrealizedLoss - * @property {MetricPattern1} unrealizedProfit - */ - -/** - * Create a UnrealizedPattern pattern node - * @param {BrkClientBase} client - * @param {string} acc - Accumulated metric name - * @returns {UnrealizedPattern} - */ -function createUnrealizedPattern(client, acc) { - return { - negUnrealizedLoss: createMetricPattern1(client, _m(acc, 'neg_unrealized_loss')), - netUnrealizedPnl: createMetricPattern1(client, _m(acc, 'net_unrealized_pnl')), - supplyInLoss: createActiveSupplyPattern(client, _m(acc, 'supply_in_loss')), - supplyInProfit: createActiveSupplyPattern(client, _m(acc, 'supply_in_profit')), - totalUnrealizedPnl: createMetricPattern1(client, _m(acc, 'total_unrealized_pnl')), - unrealizedLoss: createMetricPattern1(client, _m(acc, 'unrealized_loss')), - unrealizedProfit: createMetricPattern1(client, _m(acc, 'unrealized_profit')), - }; -} - /** * @typedef {Object} PeriodCagrPattern * @property {MetricPattern4} _10y @@ -2533,6 +2504,35 @@ function createPeriodCagrPattern(client, acc) { }; } +/** + * @typedef {Object} _0satsPattern2 + * @property {ActivityPattern2} activity + * @property {CostBasisPattern} costBasis + * @property {OutputsPattern} outputs + * @property {RealizedPattern} realized + * @property {RelativePattern4} relative + * @property {SupplyPattern2} supply + * @property {UnrealizedPattern} unrealized + */ + +/** + * Create a _0satsPattern2 pattern node + * @param {BrkClientBase} client + * @param {string} acc - Accumulated metric name + * @returns {_0satsPattern2} + */ +function create_0satsPattern2(client, acc) { + return { + activity: createActivityPattern2(client, acc), + costBasis: createCostBasisPattern(client, acc), + outputs: createOutputsPattern(client, _m(acc, 'utxo_count')), + realized: createRealizedPattern(client, acc), + relative: createRelativePattern4(client, _m(acc, 'supply_in')), + supply: createSupplyPattern2(client, _m(acc, 'supply')), + unrealized: createUnrealizedPattern(client, acc), + }; +} + /** * @typedef {Object} ActivityPattern2 * @property {BlockCountPattern} coinblocksDestroyed @@ -2626,44 +2626,23 @@ function createCoinbasePattern2(client, acc) { } /** - * @typedef {Object} ActiveSupplyPattern - * @property {MetricPattern1} bitcoin - * @property {MetricPattern1} dollars - * @property {MetricPattern1} sats + * @typedef {Object} CoinbasePattern + * @property {BitcoinPattern} bitcoin + * @property {DollarsPattern} dollars + * @property {DollarsPattern} sats */ /** - * Create a ActiveSupplyPattern pattern node + * Create a CoinbasePattern pattern node * @param {BrkClientBase} client * @param {string} acc - Accumulated metric name - * @returns {ActiveSupplyPattern} + * @returns {CoinbasePattern} */ -function createActiveSupplyPattern(client, acc) { +function createCoinbasePattern(client, acc) { return { - bitcoin: createMetricPattern1(client, _m(acc, 'btc')), - dollars: createMetricPattern1(client, _m(acc, 'usd')), - sats: createMetricPattern1(client, acc), - }; -} - -/** - * @typedef {Object} SegwitAdoptionPattern - * @property {MetricPattern11} base - * @property {MetricPattern2} cumulative - * @property {MetricPattern2} sum - */ - -/** - * Create a SegwitAdoptionPattern pattern node - * @param {BrkClientBase} client - * @param {string} acc - Accumulated metric name - * @returns {SegwitAdoptionPattern} - */ -function createSegwitAdoptionPattern(client, acc) { - return { - base: createMetricPattern11(client, acc), - cumulative: createMetricPattern2(client, _m(acc, 'cumulative')), - sum: createMetricPattern2(client, _m(acc, 'sum')), + bitcoin: createBitcoinPattern(client, _m(acc, 'btc')), + dollars: createDollarsPattern(client, _m(acc, 'usd')), + sats: createDollarsPattern(client, acc), }; } @@ -2710,23 +2689,63 @@ function create_2015Pattern(client, acc) { } /** - * @typedef {Object} CoinbasePattern - * @property {BitcoinPattern} bitcoin - * @property {DollarsPattern} dollars - * @property {DollarsPattern} sats + * @typedef {Object} SegwitAdoptionPattern + * @property {MetricPattern11} base + * @property {MetricPattern2} cumulative + * @property {MetricPattern2} sum */ /** - * Create a CoinbasePattern pattern node + * Create a SegwitAdoptionPattern pattern node * @param {BrkClientBase} client * @param {string} acc - Accumulated metric name - * @returns {CoinbasePattern} + * @returns {SegwitAdoptionPattern} */ -function createCoinbasePattern(client, acc) { +function createSegwitAdoptionPattern(client, acc) { return { - bitcoin: createBitcoinPattern(client, _m(acc, 'btc')), - dollars: createDollarsPattern(client, _m(acc, 'usd')), - sats: createDollarsPattern(client, acc), + base: createMetricPattern11(client, acc), + cumulative: createMetricPattern2(client, _m(acc, 'cumulative')), + sum: createMetricPattern2(client, _m(acc, 'sum')), + }; +} + +/** + * @typedef {Object} ActiveSupplyPattern + * @property {MetricPattern1} bitcoin + * @property {MetricPattern1} dollars + * @property {MetricPattern1} sats + */ + +/** + * Create a ActiveSupplyPattern pattern node + * @param {BrkClientBase} client + * @param {string} acc - Accumulated metric name + * @returns {ActiveSupplyPattern} + */ +function createActiveSupplyPattern(client, acc) { + return { + bitcoin: createMetricPattern1(client, _m(acc, 'btc')), + dollars: createMetricPattern1(client, _m(acc, 'usd')), + sats: createMetricPattern1(client, acc), + }; +} + +/** + * @typedef {Object} SupplyPattern2 + * @property {ActiveSupplyPattern} halved + * @property {ActiveSupplyPattern} total + */ + +/** + * Create a SupplyPattern2 pattern node + * @param {BrkClientBase} client + * @param {string} acc - Accumulated metric name + * @returns {SupplyPattern2} + */ +function createSupplyPattern2(client, acc) { + return { + halved: createActiveSupplyPattern(client, _m(acc, 'halved')), + total: createActiveSupplyPattern(client, acc), }; } @@ -2787,25 +2806,6 @@ function createRelativePattern4(client, acc) { }; } -/** - * @typedef {Object} SupplyPattern2 - * @property {ActiveSupplyPattern} halved - * @property {ActiveSupplyPattern} total - */ - -/** - * Create a SupplyPattern2 pattern node - * @param {BrkClientBase} client - * @param {string} acc - Accumulated metric name - * @returns {SupplyPattern2} - */ -function createSupplyPattern2(client, acc) { - return { - halved: createActiveSupplyPattern(client, _m(acc, 'halved')), - total: createActiveSupplyPattern(client, acc), - }; -} - /** * @template T * @typedef {Object} BitcoinPattern2 @@ -2827,27 +2827,6 @@ function createBitcoinPattern2(client, acc) { }; } -/** - * @template T - * @typedef {Object} BlockCountPattern - * @property {MetricPattern1} cumulative - * @property {MetricPattern1} sum - */ - -/** - * Create a BlockCountPattern pattern node - * @template T - * @param {BrkClientBase} client - * @param {string} acc - Accumulated metric name - * @returns {BlockCountPattern} - */ -function createBlockCountPattern(client, acc) { - return { - cumulative: createMetricPattern1(client, _m(acc, 'cumulative')), - sum: createMetricPattern1(client, acc), - }; -} - /** * @template T * @typedef {Object} SatsPattern @@ -2869,6 +2848,27 @@ function createSatsPattern(client, acc) { }; } +/** + * @template T + * @typedef {Object} BlockCountPattern + * @property {MetricPattern1} cumulative + * @property {MetricPattern1} sum + */ + +/** + * Create a BlockCountPattern pattern node + * @template T + * @param {BrkClientBase} client + * @param {string} acc - Accumulated metric name + * @returns {BlockCountPattern} + */ +function createBlockCountPattern(client, acc) { + return { + cumulative: createMetricPattern1(client, _m(acc, 'cumulative')), + sum: createMetricPattern1(client, acc), + }; +} + /** * @typedef {Object} RealizedPriceExtraPattern * @property {MetricPattern4} ratio @@ -3698,8 +3698,8 @@ function createOutputsPattern(client, acc) { /** * @typedef {Object} MetricsTree_Market_Dca - * @property {MetricsTree_Market_Dca_ClassAveragePrice} classAveragePrice - * @property {ClassAveragePricePattern} classReturns + * @property {ClassAveragePricePattern} classAveragePrice + * @property {MetricsTree_Market_Dca_ClassReturns} classReturns * @property {MetricsTree_Market_Dca_ClassStack} classStack * @property {PeriodAveragePricePattern} periodAveragePrice * @property {PeriodCagrPattern} periodCagr @@ -3709,18 +3709,18 @@ function createOutputsPattern(client, acc) { */ /** - * @typedef {Object} MetricsTree_Market_Dca_ClassAveragePrice - * @property {MetricPattern4} _2015 - * @property {MetricPattern4} _2016 - * @property {MetricPattern4} _2017 - * @property {MetricPattern4} _2018 - * @property {MetricPattern4} _2019 - * @property {MetricPattern4} _2020 - * @property {MetricPattern4} _2021 - * @property {MetricPattern4} _2022 - * @property {MetricPattern4} _2023 - * @property {MetricPattern4} _2024 - * @property {MetricPattern4} _2025 + * @typedef {Object} MetricsTree_Market_Dca_ClassReturns + * @property {MetricPattern4} _2015 + * @property {MetricPattern4} _2016 + * @property {MetricPattern4} _2017 + * @property {MetricPattern4} _2018 + * @property {MetricPattern4} _2019 + * @property {MetricPattern4} _2020 + * @property {MetricPattern4} _2021 + * @property {MetricPattern4} _2022 + * @property {MetricPattern4} _2023 + * @property {MetricPattern4} _2024 + * @property {MetricPattern4} _2025 */ /** @@ -5728,20 +5728,20 @@ class BrkClient extends BrkClientBase { yearsSincePriceAth: createMetricPattern4(this, 'years_since_price_ath'), }, dca: { - classAveragePrice: { - _2015: createMetricPattern4(this, 'dca_class_2015_average_price'), - _2016: createMetricPattern4(this, 'dca_class_2016_average_price'), - _2017: createMetricPattern4(this, 'dca_class_2017_average_price'), - _2018: createMetricPattern4(this, 'dca_class_2018_average_price'), - _2019: createMetricPattern4(this, 'dca_class_2019_average_price'), - _2020: createMetricPattern4(this, 'dca_class_2020_average_price'), - _2021: createMetricPattern4(this, 'dca_class_2021_average_price'), - _2022: createMetricPattern4(this, 'dca_class_2022_average_price'), - _2023: createMetricPattern4(this, 'dca_class_2023_average_price'), - _2024: createMetricPattern4(this, 'dca_class_2024_average_price'), - _2025: createMetricPattern4(this, 'dca_class_2025_average_price'), + classAveragePrice: createClassAveragePricePattern(this, 'dca_class'), + classReturns: { + _2015: createMetricPattern4(this, 'dca_class_2015_returns'), + _2016: createMetricPattern4(this, 'dca_class_2016_returns'), + _2017: createMetricPattern4(this, 'dca_class_2017_returns'), + _2018: createMetricPattern4(this, 'dca_class_2018_returns'), + _2019: createMetricPattern4(this, 'dca_class_2019_returns'), + _2020: createMetricPattern4(this, 'dca_class_2020_returns'), + _2021: createMetricPattern4(this, 'dca_class_2021_returns'), + _2022: createMetricPattern4(this, 'dca_class_2022_returns'), + _2023: createMetricPattern4(this, 'dca_class_2023_returns'), + _2024: createMetricPattern4(this, 'dca_class_2024_returns'), + _2025: createMetricPattern4(this, 'dca_class_2025_returns'), }, - classReturns: createClassAveragePricePattern(this, 'dca_class'), classStack: { _2015: create_2015Pattern(this, 'dca_class_2015_stack'), _2016: create_2015Pattern(this, 'dca_class_2016_stack'), diff --git a/packages/brk_client/brk_client/__init__.py b/packages/brk_client/brk_client/__init__.py index 434952a0c..ef90b8b72 100644 --- a/packages/brk_client/brk_client/__init__.py +++ b/packages/brk_client/brk_client/__init__.py @@ -2056,17 +2056,17 @@ class ClassAveragePricePattern(Generic[T]): def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self._2015: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2015_returns')) - self._2016: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2016_returns')) - self._2017: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2017_returns')) - self._2018: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2018_returns')) - self._2019: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2019_returns')) - self._2020: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2020_returns')) - self._2021: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2021_returns')) - self._2022: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2022_returns')) - self._2023: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2023_returns')) - self._2024: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2024_returns')) - self._2025: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2025_returns')) + self._2015: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2015_average_price')) + self._2016: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2016_average_price')) + self._2017: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2017_average_price')) + self._2018: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2018_average_price')) + self._2019: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2019_average_price')) + self._2020: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2020_average_price')) + self._2021: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2021_average_price')) + self._2022: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2022_average_price')) + self._2023: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2023_average_price')) + self._2024: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2024_average_price')) + self._2025: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2025_average_price')) class DollarsPattern(Generic[T]): """Pattern struct for repeated tree structure.""" @@ -2085,22 +2085,6 @@ class DollarsPattern(Generic[T]): self.pct90: MetricPattern6[T] = MetricPattern6(client, _m(acc, 'pct90')) self.sum: MetricPattern2[T] = MetricPattern2(client, _m(acc, 'sum')) -class RelativePattern2: - """Pattern struct for repeated tree structure.""" - - def __init__(self, client: BrkClientBase, acc: str): - """Create pattern node with accumulated metric name.""" - self.neg_unrealized_loss_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss_rel_to_own_market_cap')) - self.neg_unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss_rel_to_own_total_unrealized_pnl')) - self.net_unrealized_pnl_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'net_unrealized_pnl_rel_to_own_market_cap')) - self.net_unrealized_pnl_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'net_unrealized_pnl_rel_to_own_total_unrealized_pnl')) - self.supply_in_loss_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_loss_rel_to_own_supply')) - self.supply_in_profit_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_profit_rel_to_own_supply')) - self.unrealized_loss_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_loss_rel_to_own_market_cap')) - self.unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_loss_rel_to_own_total_unrealized_pnl')) - self.unrealized_profit_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_profit_rel_to_own_market_cap')) - self.unrealized_profit_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_profit_rel_to_own_total_unrealized_pnl')) - class RelativePattern: """Pattern struct for repeated tree structure.""" @@ -2117,6 +2101,22 @@ class RelativePattern: self.unrealized_loss_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_loss_rel_to_market_cap')) self.unrealized_profit_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_profit_rel_to_market_cap')) +class RelativePattern2: + """Pattern struct for repeated tree structure.""" + + def __init__(self, client: BrkClientBase, acc: str): + """Create pattern node with accumulated metric name.""" + self.neg_unrealized_loss_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss_rel_to_own_market_cap')) + self.neg_unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss_rel_to_own_total_unrealized_pnl')) + self.net_unrealized_pnl_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'net_unrealized_pnl_rel_to_own_market_cap')) + self.net_unrealized_pnl_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'net_unrealized_pnl_rel_to_own_total_unrealized_pnl')) + self.supply_in_loss_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_loss_rel_to_own_supply')) + self.supply_in_profit_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_profit_rel_to_own_supply')) + self.unrealized_loss_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_loss_rel_to_own_market_cap')) + self.unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_loss_rel_to_own_total_unrealized_pnl')) + self.unrealized_profit_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_profit_rel_to_own_market_cap')) + self.unrealized_profit_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_profit_rel_to_own_total_unrealized_pnl')) + class CountPattern2(Generic[T]): """Pattern struct for repeated tree structure.""" @@ -2219,6 +2219,19 @@ class _10yTo12yPattern: self.supply: SupplyPattern2 = SupplyPattern2(client, _m(acc, 'supply')) self.unrealized: UnrealizedPattern = UnrealizedPattern(client, acc) +class UnrealizedPattern: + """Pattern struct for repeated tree structure.""" + + def __init__(self, client: BrkClientBase, acc: str): + """Create pattern node with accumulated metric name.""" + self.neg_unrealized_loss: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss')) + self.net_unrealized_pnl: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'net_unrealized_pnl')) + self.supply_in_loss: ActiveSupplyPattern = ActiveSupplyPattern(client, _m(acc, 'supply_in_loss')) + self.supply_in_profit: ActiveSupplyPattern = ActiveSupplyPattern(client, _m(acc, 'supply_in_profit')) + self.total_unrealized_pnl: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'total_unrealized_pnl')) + self.unrealized_loss: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'unrealized_loss')) + self.unrealized_profit: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'unrealized_profit')) + class _10yPattern: """Pattern struct for repeated tree structure.""" @@ -2232,19 +2245,6 @@ class _10yPattern: self.supply: SupplyPattern2 = SupplyPattern2(client, _m(acc, 'supply')) self.unrealized: UnrealizedPattern = UnrealizedPattern(client, acc) -class _0satsPattern2: - """Pattern struct for repeated tree structure.""" - - def __init__(self, client: BrkClientBase, acc: str): - """Create pattern node with accumulated metric name.""" - self.activity: ActivityPattern2 = ActivityPattern2(client, acc) - self.cost_basis: CostBasisPattern = CostBasisPattern(client, acc) - self.outputs: OutputsPattern = OutputsPattern(client, _m(acc, 'utxo_count')) - self.realized: RealizedPattern = RealizedPattern(client, acc) - self.relative: RelativePattern4 = RelativePattern4(client, _m(acc, 'supply_in')) - self.supply: SupplyPattern2 = SupplyPattern2(client, _m(acc, 'supply')) - self.unrealized: UnrealizedPattern = UnrealizedPattern(client, acc) - class _100btcPattern: """Pattern struct for repeated tree structure.""" @@ -2258,19 +2258,6 @@ class _100btcPattern: self.supply: SupplyPattern2 = SupplyPattern2(client, _m(acc, 'supply')) self.unrealized: UnrealizedPattern = UnrealizedPattern(client, acc) -class UnrealizedPattern: - """Pattern struct for repeated tree structure.""" - - def __init__(self, client: BrkClientBase, acc: str): - """Create pattern node with accumulated metric name.""" - self.neg_unrealized_loss: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss')) - self.net_unrealized_pnl: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'net_unrealized_pnl')) - self.supply_in_loss: ActiveSupplyPattern = ActiveSupplyPattern(client, _m(acc, 'supply_in_loss')) - self.supply_in_profit: ActiveSupplyPattern = ActiveSupplyPattern(client, _m(acc, 'supply_in_profit')) - self.total_unrealized_pnl: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'total_unrealized_pnl')) - self.unrealized_loss: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'unrealized_loss')) - self.unrealized_profit: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'unrealized_profit')) - class PeriodCagrPattern: """Pattern struct for repeated tree structure.""" @@ -2284,6 +2271,19 @@ class PeriodCagrPattern: self._6y: MetricPattern4[StoredF32] = MetricPattern4(client, _p('6y', acc)) self._8y: MetricPattern4[StoredF32] = MetricPattern4(client, _p('8y', acc)) +class _0satsPattern2: + """Pattern struct for repeated tree structure.""" + + def __init__(self, client: BrkClientBase, acc: str): + """Create pattern node with accumulated metric name.""" + self.activity: ActivityPattern2 = ActivityPattern2(client, acc) + self.cost_basis: CostBasisPattern = CostBasisPattern(client, acc) + self.outputs: OutputsPattern = OutputsPattern(client, _m(acc, 'utxo_count')) + self.realized: RealizedPattern = RealizedPattern(client, acc) + self.relative: RelativePattern4 = RelativePattern4(client, _m(acc, 'supply_in')) + self.supply: SupplyPattern2 = SupplyPattern2(client, _m(acc, 'supply')) + self.unrealized: UnrealizedPattern = UnrealizedPattern(client, acc) + class ActivityPattern2: """Pattern struct for repeated tree structure.""" @@ -2323,23 +2323,14 @@ class CoinbasePattern2: self.dollars: BlockCountPattern[Dollars] = BlockCountPattern(client, _m(acc, 'usd')) self.sats: BlockCountPattern[Sats] = BlockCountPattern(client, acc) -class ActiveSupplyPattern: +class CoinbasePattern: """Pattern struct for repeated tree structure.""" def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self.bitcoin: MetricPattern1[Bitcoin] = MetricPattern1(client, _m(acc, 'btc')) - self.dollars: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'usd')) - self.sats: MetricPattern1[Sats] = MetricPattern1(client, acc) - -class SegwitAdoptionPattern: - """Pattern struct for repeated tree structure.""" - - def __init__(self, client: BrkClientBase, acc: str): - """Create pattern node with accumulated metric name.""" - self.base: MetricPattern11[StoredF32] = MetricPattern11(client, acc) - self.cumulative: MetricPattern2[StoredF32] = MetricPattern2(client, _m(acc, 'cumulative')) - self.sum: MetricPattern2[StoredF32] = MetricPattern2(client, _m(acc, 'sum')) + self.bitcoin: BitcoinPattern = BitcoinPattern(client, _m(acc, 'btc')) + self.dollars: DollarsPattern[Dollars] = DollarsPattern(client, _m(acc, 'usd')) + self.sats: DollarsPattern[Sats] = DollarsPattern(client, acc) class UnclaimedRewardsPattern: """Pattern struct for repeated tree structure.""" @@ -2359,14 +2350,31 @@ class _2015Pattern: self.dollars: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'usd')) self.sats: MetricPattern4[Sats] = MetricPattern4(client, acc) -class CoinbasePattern: +class SegwitAdoptionPattern: """Pattern struct for repeated tree structure.""" def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self.bitcoin: BitcoinPattern = BitcoinPattern(client, _m(acc, 'btc')) - self.dollars: DollarsPattern[Dollars] = DollarsPattern(client, _m(acc, 'usd')) - self.sats: DollarsPattern[Sats] = DollarsPattern(client, acc) + self.base: MetricPattern11[StoredF32] = MetricPattern11(client, acc) + self.cumulative: MetricPattern2[StoredF32] = MetricPattern2(client, _m(acc, 'cumulative')) + self.sum: MetricPattern2[StoredF32] = MetricPattern2(client, _m(acc, 'sum')) + +class ActiveSupplyPattern: + """Pattern struct for repeated tree structure.""" + + def __init__(self, client: BrkClientBase, acc: str): + """Create pattern node with accumulated metric name.""" + self.bitcoin: MetricPattern1[Bitcoin] = MetricPattern1(client, _m(acc, 'btc')) + self.dollars: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'usd')) + self.sats: MetricPattern1[Sats] = MetricPattern1(client, acc) + +class SupplyPattern2: + """Pattern struct for repeated tree structure.""" + + def __init__(self, client: BrkClientBase, acc: str): + """Create pattern node with accumulated metric name.""" + self.halved: ActiveSupplyPattern = ActiveSupplyPattern(client, _m(acc, 'halved')) + self.total: ActiveSupplyPattern = ActiveSupplyPattern(client, acc) class _1dReturns1mSdPattern: """Pattern struct for repeated tree structure.""" @@ -2392,14 +2400,6 @@ class RelativePattern4: self.supply_in_loss_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'loss_rel_to_own_supply')) self.supply_in_profit_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'profit_rel_to_own_supply')) -class SupplyPattern2: - """Pattern struct for repeated tree structure.""" - - def __init__(self, client: BrkClientBase, acc: str): - """Create pattern node with accumulated metric name.""" - self.halved: ActiveSupplyPattern = ActiveSupplyPattern(client, _m(acc, 'halved')) - self.total: ActiveSupplyPattern = ActiveSupplyPattern(client, acc) - class BitcoinPattern2(Generic[T]): """Pattern struct for repeated tree structure.""" @@ -2408,14 +2408,6 @@ class BitcoinPattern2(Generic[T]): self.cumulative: MetricPattern2[T] = MetricPattern2(client, _m(acc, 'cumulative')) self.sum: MetricPattern1[T] = MetricPattern1(client, acc) -class BlockCountPattern(Generic[T]): - """Pattern struct for repeated tree structure.""" - - def __init__(self, client: BrkClientBase, acc: str): - """Create pattern node with accumulated metric name.""" - self.cumulative: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'cumulative')) - self.sum: MetricPattern1[T] = MetricPattern1(client, acc) - class SatsPattern(Generic[T]): """Pattern struct for repeated tree structure.""" @@ -2424,6 +2416,14 @@ class SatsPattern(Generic[T]): self.ohlc: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'ohlc_sats')) self.split: SplitPattern2[T] = SplitPattern2(client, _m(acc, 'sats')) +class BlockCountPattern(Generic[T]): + """Pattern struct for repeated tree structure.""" + + def __init__(self, client: BrkClientBase, acc: str): + """Create pattern node with accumulated metric name.""" + self.cumulative: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'cumulative')) + self.sum: MetricPattern1[T] = MetricPattern1(client, acc) + class RealizedPriceExtraPattern: """Pattern struct for repeated tree structure.""" @@ -3271,21 +3271,21 @@ class MetricsTree_Market_Ath: self.price_drawdown: MetricPattern3[StoredF32] = MetricPattern3(client, 'price_drawdown') self.years_since_price_ath: MetricPattern4[StoredF32] = MetricPattern4(client, 'years_since_price_ath') -class MetricsTree_Market_Dca_ClassAveragePrice: +class MetricsTree_Market_Dca_ClassReturns: """Metrics tree node.""" def __init__(self, client: BrkClientBase, base_path: str = ''): - self._2015: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2015_average_price') - self._2016: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2016_average_price') - self._2017: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2017_average_price') - self._2018: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2018_average_price') - self._2019: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2019_average_price') - self._2020: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2020_average_price') - self._2021: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2021_average_price') - self._2022: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2022_average_price') - self._2023: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2023_average_price') - self._2024: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2024_average_price') - self._2025: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2025_average_price') + self._2015: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2015_returns') + self._2016: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2016_returns') + self._2017: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2017_returns') + self._2018: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2018_returns') + self._2019: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2019_returns') + self._2020: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2020_returns') + self._2021: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2021_returns') + self._2022: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2022_returns') + self._2023: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2023_returns') + self._2024: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2024_returns') + self._2025: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2025_returns') class MetricsTree_Market_Dca_ClassStack: """Metrics tree node.""" @@ -3307,8 +3307,8 @@ class MetricsTree_Market_Dca: """Metrics tree node.""" def __init__(self, client: BrkClientBase, base_path: str = ''): - self.class_average_price: MetricsTree_Market_Dca_ClassAveragePrice = MetricsTree_Market_Dca_ClassAveragePrice(client) - self.class_returns: ClassAveragePricePattern[StoredF32] = ClassAveragePricePattern(client, 'dca_class') + self.class_average_price: ClassAveragePricePattern[Dollars] = ClassAveragePricePattern(client, 'dca_class') + self.class_returns: MetricsTree_Market_Dca_ClassReturns = MetricsTree_Market_Dca_ClassReturns(client) self.class_stack: MetricsTree_Market_Dca_ClassStack = MetricsTree_Market_Dca_ClassStack(client) self.period_average_price: PeriodAveragePricePattern[Dollars] = PeriodAveragePricePattern(client, 'dca_average_price') self.period_cagr: PeriodCagrPattern = PeriodCagrPattern(client, 'dca_cagr') diff --git a/website/scripts/chart/index.js b/website/scripts/chart/index.js index 0f185f78d..3d6d3563d 100644 --- a/website/scripts/chart/index.js +++ b/website/scripts/chart/index.js @@ -37,7 +37,7 @@ import { resources } from "../resources.js"; * @property {number} paneIndex * @property {Signal} active * @property {Signal} highlighted - * @property {Signal} hasData + * @property {() => boolean} hasData * @property {Signal} url * @property {() => readonly T[]} getData * @property {(data: T) => void} update @@ -402,7 +402,7 @@ export function createChart({ setup({ active, highlighted, zOrder: -order }); - const hasData = signals.createSignal(false); + let hasData = false; let lastTime = -Infinity; /** @type {MetricResource | undefined} */ @@ -412,7 +412,7 @@ export function createChart({ const series = { active, highlighted, - hasData, + hasData: () => hasData, id, paneIndex, url: signals.createSignal(/** @type {string | null} */ (null)), @@ -496,7 +496,7 @@ export function createChart({ // Find start index for processing let startIdx = 0; - if (hasData()) { + if (hasData) { // Binary search to find first index where time >= lastTime let lo = 0; let hi = length; @@ -532,7 +532,7 @@ export function createChart({ } } - if (!hasData()) { + if (!hasData) { // Initial load: build full array const data = /** @type {LineData[] | CandlestickData[]} */ ( Array.from({ length }) @@ -564,7 +564,7 @@ export function createChart({ data.length -= timeOffset; setData(data); - hasData.set(true); + hasData = true; lastTime = /** @type {number} */ (data.at(-1)?.time) ?? -Infinity; @@ -596,7 +596,7 @@ export function createChart({ } else if (data) { signals.createEffect(data, (data) => { setData(data); - hasData.set(true); + hasData = true; if (fitContent) { ichart.timeScale().fitContent(); }