clients: snapshot

This commit is contained in:
nym21
2026-01-12 08:48:12 +01:00
parent 5826d78e35
commit 8fe0af349d
19 changed files with 5280 additions and 3272 deletions
+190 -190
View File
@@ -3390,6 +3390,39 @@ impl<T: DeserializeOwned> PeriodAveragePricePattern<T> {
}
}
/// Pattern struct for repeated tree structure.
pub struct ClassAveragePricePattern<T> {
pub _2015: MetricPattern4<T>,
pub _2016: MetricPattern4<T>,
pub _2017: MetricPattern4<T>,
pub _2018: MetricPattern4<T>,
pub _2019: MetricPattern4<T>,
pub _2020: MetricPattern4<T>,
pub _2021: MetricPattern4<T>,
pub _2022: MetricPattern4<T>,
pub _2023: MetricPattern4<T>,
pub _2024: MetricPattern4<T>,
pub _2025: MetricPattern4<T>,
}
impl<T: DeserializeOwned> ClassAveragePricePattern<T> {
pub fn new(client: Arc<BrkClientBase>, base_path: String) -> Self {
Self {
_2015: MetricPattern4::new(client.clone(), format!("{base_path}_2015")),
_2016: MetricPattern4::new(client.clone(), format!("{base_path}_2016")),
_2017: MetricPattern4::new(client.clone(), format!("{base_path}_2017")),
_2018: MetricPattern4::new(client.clone(), format!("{base_path}_2018")),
_2019: MetricPattern4::new(client.clone(), format!("{base_path}_2019")),
_2020: MetricPattern4::new(client.clone(), format!("{base_path}_2020")),
_2021: MetricPattern4::new(client.clone(), format!("{base_path}_2021")),
_2022: MetricPattern4::new(client.clone(), format!("{base_path}_2022")),
_2023: MetricPattern4::new(client.clone(), format!("{base_path}_2023")),
_2024: MetricPattern4::new(client.clone(), format!("{base_path}_2024")),
_2025: MetricPattern4::new(client.clone(), format!("{base_path}_2025")),
}
}
}
/// Pattern struct for repeated tree structure.
pub struct DollarsPattern<T> {
pub average: MetricPattern2<T>,
@@ -3424,39 +3457,6 @@ impl<T: DeserializeOwned> DollarsPattern<T> {
}
}
/// Pattern struct for repeated tree structure.
pub struct ClassAveragePricePattern<T> {
pub _2015: MetricPattern4<T>,
pub _2016: MetricPattern4<T>,
pub _2017: MetricPattern4<T>,
pub _2018: MetricPattern4<T>,
pub _2019: MetricPattern4<T>,
pub _2020: MetricPattern4<T>,
pub _2021: MetricPattern4<T>,
pub _2022: MetricPattern4<T>,
pub _2023: MetricPattern4<T>,
pub _2024: MetricPattern4<T>,
pub _2025: MetricPattern4<T>,
}
impl<T: DeserializeOwned> ClassAveragePricePattern<T> {
pub fn new(client: Arc<BrkClientBase>, base_path: String) -> Self {
Self {
_2015: MetricPattern4::new(client.clone(), format!("{base_path}_2015")),
_2016: MetricPattern4::new(client.clone(), format!("{base_path}_2016")),
_2017: MetricPattern4::new(client.clone(), format!("{base_path}_2017")),
_2018: MetricPattern4::new(client.clone(), format!("{base_path}_2018")),
_2019: MetricPattern4::new(client.clone(), format!("{base_path}_2019")),
_2020: MetricPattern4::new(client.clone(), format!("{base_path}_2020")),
_2021: MetricPattern4::new(client.clone(), format!("{base_path}_2021")),
_2022: MetricPattern4::new(client.clone(), format!("{base_path}_2022")),
_2023: MetricPattern4::new(client.clone(), format!("{base_path}_2023")),
_2024: MetricPattern4::new(client.clone(), format!("{base_path}_2024")),
_2025: MetricPattern4::new(client.clone(), format!("{base_path}_2025")),
}
}
}
/// Pattern struct for repeated tree structure.
pub struct FullnessPattern<T> {
pub average: MetricPattern2<T>,
@@ -3731,6 +3731,84 @@ impl _0satsPattern {
}
}
/// 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<BrkClientBase>, acc: String) -> Self {
Self {
activity: ActivityPattern2::new(client.clone(), acc.clone()),
cost_basis: CostBasisPattern::new(client.clone(), acc.clone()),
outputs: OutputsPattern::new(client.clone(), acc.clone()),
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,
pub cost_basis: CostBasisPattern,
pub outputs: OutputsPattern,
pub realized: RealizedPattern,
pub relative: RelativePattern,
pub supply: SupplyPattern2,
pub unrealized: UnrealizedPattern,
}
impl _100btcPattern {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
activity: ActivityPattern2::new(client.clone(), acc.clone()),
cost_basis: CostBasisPattern::new(client.clone(), acc.clone()),
outputs: OutputsPattern::new(client.clone(), acc.clone()),
realized: RealizedPattern::new(client.clone(), acc.clone()),
relative: RelativePattern::new(client.clone(), acc.clone()),
supply: SupplyPattern2::new(client.clone(), _m(&acc, "supply")),
unrealized: UnrealizedPattern::new(client.clone(), acc.clone()),
}
}
}
/// Pattern struct for repeated tree structure.
pub struct _10yPattern {
pub activity: ActivityPattern2,
pub cost_basis: CostBasisPattern,
pub outputs: OutputsPattern,
pub realized: RealizedPattern4,
pub relative: RelativePattern,
pub supply: SupplyPattern2,
pub unrealized: UnrealizedPattern,
}
impl _10yPattern {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
activity: ActivityPattern2::new(client.clone(), acc.clone()),
cost_basis: CostBasisPattern::new(client.clone(), acc.clone()),
outputs: OutputsPattern::new(client.clone(), acc.clone()),
realized: RealizedPattern4::new(client.clone(), acc.clone()),
relative: RelativePattern::new(client.clone(), acc.clone()),
supply: SupplyPattern2::new(client.clone(), _m(&acc, "supply")),
unrealized: UnrealizedPattern::new(client.clone(), acc.clone()),
}
}
}
/// Pattern struct for repeated tree structure.
pub struct PeriodCagrPattern {
pub _10y: MetricPattern4<StoredF32>,
@@ -3832,58 +3910,6 @@ impl _10yTo12yPattern {
}
}
/// Pattern struct for repeated tree structure.
pub struct _10yPattern {
pub activity: ActivityPattern2,
pub cost_basis: CostBasisPattern,
pub outputs: OutputsPattern,
pub realized: RealizedPattern4,
pub relative: RelativePattern,
pub supply: SupplyPattern2,
pub unrealized: UnrealizedPattern,
}
impl _10yPattern {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
activity: ActivityPattern2::new(client.clone(), acc.clone()),
cost_basis: CostBasisPattern::new(client.clone(), acc.clone()),
outputs: OutputsPattern::new(client.clone(), acc.clone()),
realized: RealizedPattern4::new(client.clone(), acc.clone()),
relative: RelativePattern::new(client.clone(), acc.clone()),
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,
pub cost_basis: CostBasisPattern,
pub outputs: OutputsPattern,
pub realized: RealizedPattern,
pub relative: RelativePattern,
pub supply: SupplyPattern2,
pub unrealized: UnrealizedPattern,
}
impl _100btcPattern {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
activity: ActivityPattern2::new(client.clone(), acc.clone()),
cost_basis: CostBasisPattern::new(client.clone(), acc.clone()),
outputs: OutputsPattern::new(client.clone(), acc.clone()),
realized: RealizedPattern::new(client.clone(), acc.clone()),
relative: RelativePattern::new(client.clone(), acc.clone()),
supply: SupplyPattern2::new(client.clone(), _m(&acc, "supply")),
unrealized: UnrealizedPattern::new(client.clone(), acc.clone()),
}
}
}
/// Pattern struct for repeated tree structure.
pub struct UnrealizedPattern {
pub neg_unrealized_loss: MetricPattern1<Dollars>,
@@ -3919,32 +3945,6 @@ impl UnrealizedPattern {
}
}
/// 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<BrkClientBase>, acc: String) -> Self {
Self {
activity: ActivityPattern2::new(client.clone(), acc.clone()),
cost_basis: CostBasisPattern::new(client.clone(), acc.clone()),
outputs: OutputsPattern::new(client.clone(), acc.clone()),
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<StoredF64>,
@@ -3996,24 +3996,6 @@ impl<T: DeserializeOwned> SplitPattern2<T> {
}
}
/// Pattern struct for repeated tree structure.
pub struct CoinbasePattern {
pub bitcoin: FullnessPattern<Bitcoin>,
pub dollars: DollarsPattern<Dollars>,
pub sats: DollarsPattern<Sats>,
}
impl CoinbasePattern {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
bitcoin: FullnessPattern::new(client.clone(), _m(&acc, "btc")),
dollars: DollarsPattern::new(client.clone(), _m(&acc, "usd")),
sats: DollarsPattern::new(client.clone(), acc.clone()),
}
}
}
/// Pattern struct for repeated tree structure.
pub struct CostBasisPattern2 {
pub max: MetricPattern1<Dollars>,
@@ -4034,24 +4016,6 @@ impl CostBasisPattern2 {
}
}
/// Pattern struct for repeated tree structure.
pub struct CoinbasePattern2 {
pub bitcoin: BlockCountPattern<Bitcoin>,
pub dollars: BlockCountPattern<Dollars>,
pub sats: BlockCountPattern<Sats>,
}
impl CoinbasePattern2 {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
bitcoin: BlockCountPattern::new(client.clone(), _m(&acc, "btc")),
dollars: BlockCountPattern::new(client.clone(), _m(&acc, "usd")),
sats: BlockCountPattern::new(client.clone(), acc.clone()),
}
}
}
/// Pattern struct for repeated tree structure.
pub struct ActiveSupplyPattern {
pub bitcoin: MetricPattern1<Bitcoin>,
@@ -4089,23 +4053,41 @@ impl _2015Pattern {
}
/// Pattern struct for repeated tree structure.
pub struct UnclaimedRewardsPattern {
pub bitcoin: BitcoinPattern<Bitcoin>,
pub struct CoinbasePattern2 {
pub bitcoin: BlockCountPattern<Bitcoin>,
pub dollars: BlockCountPattern<Dollars>,
pub sats: BlockCountPattern<Sats>,
}
impl UnclaimedRewardsPattern {
impl CoinbasePattern2 {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
bitcoin: BitcoinPattern::new(client.clone(), _m(&acc, "btc")),
bitcoin: BlockCountPattern::new(client.clone(), _m(&acc, "btc")),
dollars: BlockCountPattern::new(client.clone(), _m(&acc, "usd")),
sats: BlockCountPattern::new(client.clone(), acc.clone()),
}
}
}
/// Pattern struct for repeated tree structure.
pub struct CoinbasePattern {
pub bitcoin: FullnessPattern<Bitcoin>,
pub dollars: DollarsPattern<Dollars>,
pub sats: DollarsPattern<Sats>,
}
impl CoinbasePattern {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
bitcoin: FullnessPattern::new(client.clone(), _m(&acc, "btc")),
dollars: DollarsPattern::new(client.clone(), _m(&acc, "usd")),
sats: DollarsPattern::new(client.clone(), acc.clone()),
}
}
}
/// Pattern struct for repeated tree structure.
pub struct SegwitAdoptionPattern {
pub base: MetricPattern11<StoredF32>,
@@ -4125,17 +4107,19 @@ impl SegwitAdoptionPattern {
}
/// Pattern struct for repeated tree structure.
pub struct SupplyPattern2 {
pub halved: ActiveSupplyPattern,
pub total: ActiveSupplyPattern,
pub struct UnclaimedRewardsPattern {
pub bitcoin: BitcoinPattern<Bitcoin>,
pub dollars: BlockCountPattern<Dollars>,
pub sats: BlockCountPattern<Sats>,
}
impl SupplyPattern2 {
impl UnclaimedRewardsPattern {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
halved: ActiveSupplyPattern::new(client.clone(), _m(&acc, "half")),
total: ActiveSupplyPattern::new(client.clone(), acc.clone()),
bitcoin: BitcoinPattern::new(client.clone(), _m(&acc, "btc")),
dollars: BlockCountPattern::new(client.clone(), _m(&acc, "usd")),
sats: BlockCountPattern::new(client.clone(), acc.clone()),
}
}
}
@@ -4156,6 +4140,22 @@ impl CostBasisPattern {
}
}
/// Pattern struct for repeated tree structure.
pub struct _1dReturns1mSdPattern {
pub sd: MetricPattern4<StoredF32>,
pub sma: MetricPattern4<StoredF32>,
}
impl _1dReturns1mSdPattern {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
sd: MetricPattern4::new(client.clone(), _m(&acc, "sd")),
sma: MetricPattern4::new(client.clone(), _m(&acc, "sma")),
}
}
}
/// Pattern struct for repeated tree structure.
pub struct RelativePattern4 {
pub supply_in_loss_rel_to_own_supply: MetricPattern1<StoredF64>,
@@ -4179,17 +4179,32 @@ impl RelativePattern4 {
}
/// Pattern struct for repeated tree structure.
pub struct _1dReturns1mSdPattern {
pub sd: MetricPattern4<StoredF32>,
pub sma: MetricPattern4<StoredF32>,
pub struct SupplyPattern2 {
pub halved: ActiveSupplyPattern,
pub total: ActiveSupplyPattern,
}
impl _1dReturns1mSdPattern {
impl SupplyPattern2 {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
sd: MetricPattern4::new(client.clone(), _m(&acc, "sd")),
sma: MetricPattern4::new(client.clone(), _m(&acc, "sma")),
halved: ActiveSupplyPattern::new(client.clone(), _m(&acc, "half")),
total: ActiveSupplyPattern::new(client.clone(), acc.clone()),
}
}
}
/// Pattern struct for repeated tree structure.
pub struct SatsPattern<T> {
pub ohlc: MetricPattern1<T>,
pub split: SplitPattern2<T>,
}
impl<T: DeserializeOwned> SatsPattern<T> {
pub fn new(client: Arc<BrkClientBase>, base_path: String) -> Self {
Self {
ohlc: MetricPattern1::new(client.clone(), format!("{base_path}_ohlc")),
split: SplitPattern2::new(client.clone(), format!("{base_path}_split")),
}
}
}
@@ -4227,16 +4242,15 @@ impl<T: DeserializeOwned> BlockCountPattern<T> {
}
/// Pattern struct for repeated tree structure.
pub struct SatsPattern<T> {
pub ohlc: MetricPattern1<T>,
pub split: SplitPattern2<T>,
pub struct RealizedPriceExtraPattern {
pub ratio: MetricPattern4<StoredF32>,
}
impl<T: DeserializeOwned> SatsPattern<T> {
pub fn new(client: Arc<BrkClientBase>, base_path: String) -> Self {
impl RealizedPriceExtraPattern {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
ohlc: MetricPattern1::new(client.clone(), format!("{base_path}_ohlc")),
split: SplitPattern2::new(client.clone(), format!("{base_path}_split")),
ratio: MetricPattern4::new(client.clone(), _m(&acc, "ratio")),
}
}
}
@@ -4255,20 +4269,6 @@ impl OutputsPattern {
}
}
/// Pattern struct for repeated tree structure.
pub struct RealizedPriceExtraPattern {
pub ratio: MetricPattern4<StoredF32>,
}
impl RealizedPriceExtraPattern {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
ratio: MetricPattern4::new(client.clone(), _m(&acc, "ratio")),
}
}
}
// Metrics tree
/// Metrics tree node.
@@ -8297,7 +8297,7 @@ impl BrkClient {
index: Index,
start: Option<i64>,
end: Option<i64>,
count: Option<i64>,
limit: Option<&str>,
format: Option<Format>,
) -> Result<FormatResponse<MetricData>> {
let mut query = Vec::new();
@@ -8307,8 +8307,8 @@ impl BrkClient {
if let Some(v) = end {
query.push(format!("end={}", v));
}
if let Some(v) = count {
query.push(format!("count={}", v));
if let Some(v) = limit {
query.push(format!("limit={}", v));
}
if let Some(v) = format {
query.push(format!("format={}", v));
@@ -8346,7 +8346,7 @@ impl BrkClient {
index: Index,
start: Option<i64>,
end: Option<i64>,
count: Option<i64>,
limit: Option<&str>,
format: Option<Format>,
) -> Result<FormatResponse<Vec<MetricData>>> {
let mut query = Vec::new();
@@ -8358,8 +8358,8 @@ impl BrkClient {
if let Some(v) = end {
query.push(format!("end={}", v));
}
if let Some(v) = count {
query.push(format!("count={}", v));
if let Some(v) = limit {
query.push(format!("limit={}", v));
}
if let Some(v) = format {
query.push(format!("format={}", v));
+11 -12
View File
@@ -1,7 +1,7 @@
use schemars::JsonSchema;
use serde::Deserialize;
use crate::{de_unquote_i64, de_unquote_usize};
use crate::{de_unquote_i64, de_unquote_limit, Limit};
/// Range parameters for slicing data
#[derive(Default, Debug, Deserialize, JsonSchema)]
@@ -16,10 +16,9 @@ pub struct DataRange {
#[schemars(example = 1000)]
end: Option<i64>,
/// Number of values to return (ignored if `end` is set)
#[serde(default, alias = "c", deserialize_with = "de_unquote_usize")]
#[schemars(example = 1, example = 10, example = 100)]
count: Option<usize>,
/// Maximum number of values to return (ignored if `end` is set)
#[serde(default, alias = "l", alias = "count", alias = "c", deserialize_with = "de_unquote_limit")]
limit: Option<Limit>,
}
impl DataRange {
@@ -33,8 +32,8 @@ impl DataRange {
self
}
pub fn set_count(mut self, count: usize) -> Self {
self.count.replace(count);
pub fn set_limit(mut self, limit: Limit) -> Self {
self.limit.replace(limit);
self
}
@@ -43,22 +42,22 @@ impl DataRange {
self.start
}
/// Get `end` value, computing it from `start + count` if `end` is unset but `count` is set.
/// Requires the vec length to resolve negative `start` indices before adding count.
/// Get `end` value, computing it from `start + limit` if `end` is unset but `limit` is set.
/// Requires the vec length to resolve negative `start` indices before adding limit.
pub fn end_for_len(&self, len: usize) -> Option<i64> {
if self.end.is_some() {
return self.end;
}
self.count.map(|count| {
self.limit.map(|limit| {
let resolved_start = self.resolve_index(self.start, len, 0);
(resolved_start + count).min(len) as i64
(resolved_start + *limit).min(len) as i64
})
}
/// Returns a string for etag/cache key generation that captures all range parameters
pub fn etag_suffix(&self) -> String {
format!("{:?}{:?}{:?}", self.start, self.end, self.count)
format!("{:?}{:?}{:?}", self.start, self.end, self.limit)
}
fn resolve_index(&self, idx: Option<i64>, len: usize, default: usize) -> usize {
+3 -3
View File
@@ -2,7 +2,7 @@ use derive_more::Deref;
use schemars::JsonSchema;
use serde::Deserialize;
use crate::{DataRange, Format};
use crate::{DataRange, Format, Limit};
/// Data range with output format for API query parameters
#[derive(Default, Debug, Deref, Deserialize, JsonSchema)]
@@ -31,8 +31,8 @@ impl DataRangeFormat {
self
}
pub fn set_count(mut self, count: usize) -> Self {
self.range = self.range.set_count(count);
pub fn set_limit(mut self, limit: Limit) -> Self {
self.range = self.range.set_limit(limit);
self
}
}
+9
View File
@@ -1,6 +1,8 @@
use serde::{Deserialize, Deserializer};
use serde_json::Value;
use crate::Limit;
pub fn de_unquote_i64<'de, D>(deserializer: D) -> Result<Option<i64>, D::Error>
where
D: Deserializer<'de>,
@@ -56,3 +58,10 @@ where
Err(serde::de::Error::custom("expected a string or number"))
}
}
pub fn de_unquote_limit<'de, D>(deserializer: D) -> Result<Option<Limit>, D::Error>
where
D: Deserializer<'de>,
{
de_unquote_usize(deserializer).map(|opt| opt.map(Limit::from))
}
+7 -1
View File
@@ -5,7 +5,7 @@ use schemars::JsonSchema;
use serde::Deserialize;
/// Maximum number of results to return. Defaults to 100 if not specified.
#[derive(Debug, Deref, Deserialize, JsonSchema)]
#[derive(Debug, Clone, Copy, Deref, Deserialize, JsonSchema)]
#[serde(transparent)]
#[allow(clippy::duplicated_attributes)]
#[schemars(default, example = 1, example = 10, example = 100)]
@@ -27,3 +27,9 @@ impl fmt::Display for Limit {
write!(f, "{}", self.0)
}
}
impl From<usize> for Limit {
fn from(value: usize) -> Self {
Self(value)
}
}