clients: snapshot

This commit is contained in:
nym21
2026-01-11 19:15:29 +01:00
parent 69f6d32d4a
commit 325811fee7
12 changed files with 8068 additions and 5199 deletions
@@ -11,9 +11,8 @@ use serde::Serialize;
use serde_json::Value;
use crate::{
ClientMetadata, GenericSyntax, IndexSetPattern, JavaScriptSyntax, PatternField,
StructuralPattern, VERSION, generate_parameterized_field, generate_tree_path_field,
to_camel_case,
ClientMetadata, GenericSyntax, IndexSetPattern, JavaScriptSyntax, StructuralPattern, VERSION,
generate_parameterized_field, generate_tree_path_field, to_camel_case,
};
/// Generate the base BrkClient class with HTTP functionality.
@@ -324,7 +323,8 @@ pub fn generate_structural_patterns(
}
writeln!(output, " * @typedef {{Object}} {}", pattern.name).unwrap();
for field in &pattern.fields {
let js_type = field_type_annotation(field, metadata, pattern.is_generic);
let js_type =
metadata.field_type_annotation(field, pattern.is_generic, None, GenericSyntax::JAVASCRIPT);
writeln!(
output,
" * @property {{{}}} {}",
@@ -371,17 +371,3 @@ pub fn generate_structural_patterns(
writeln!(output, "}}\n").unwrap();
}
}
fn field_type_annotation(field: &PatternField, metadata: &ClientMetadata, is_generic: bool) -> String {
metadata.field_type_annotation(field, is_generic, None, GenericSyntax::JAVASCRIPT)
}
/// Get field type with specific generic value type.
pub fn field_type_with_generic(
field: &PatternField,
metadata: &ClientMetadata,
is_generic: bool,
generic_value_type: Option<&str>,
) -> String {
metadata.field_type_annotation(field, is_generic, generic_value_type, GenericSyntax::JAVASCRIPT)
}
@@ -6,13 +6,13 @@ use std::fmt::Write;
use brk_types::TreeNode;
use crate::{
ClientMetadata, Endpoint, JavaScriptSyntax, PatternField, child_type_name, generate_leaf_field,
get_first_leaf_name, get_node_fields, get_pattern_instance_base, infer_accumulated_name,
prepare_tree_node, to_camel_case,
ClientMetadata, Endpoint, GenericSyntax, JavaScriptSyntax, PatternField, child_type_name,
generate_leaf_field, get_first_leaf_name, get_node_fields, get_pattern_instance_base,
infer_accumulated_name, prepare_tree_node, to_camel_case,
};
use super::api::generate_api_methods;
use super::client::{field_type_with_generic, generate_static_constants};
use super::client::generate_static_constants;
/// Generate JSDoc typedefs for the catalog tree.
pub fn generate_tree_typedefs(output: &mut String, catalog: &TreeNode, metadata: &ClientMetadata) {
@@ -49,10 +49,11 @@ fn generate_tree_typedef(
ctx.fields_with_child_info.iter().zip(ctx.children.iter())
{
let js_type = metadata.resolve_tree_field_type(
field,
child_fields.as_deref(),
name,
child_name,
|generic| field_type_with_generic(field, metadata, false, generic),
GenericSyntax::JAVASCRIPT,
);
writeln!(
@@ -10,9 +10,8 @@ use brk_types::{pools, Index};
use serde::Serialize;
use crate::{
ClientMetadata, GenericSyntax, IndexSetPattern, PatternField, PythonSyntax,
StructuralPattern, VERSION, generate_parameterized_field, generate_tree_path_field,
index_to_field_name,
ClientMetadata, IndexSetPattern, PythonSyntax, StructuralPattern, VERSION,
generate_parameterized_field, generate_tree_path_field, index_to_field_name,
};
/// Generate class-level constants for the BrkClient class.
@@ -341,13 +340,3 @@ pub fn generate_structural_patterns(
writeln!(output).unwrap();
}
}
/// Get Python type annotation for a field with optional generic value type.
pub fn field_type_with_generic(
field: &PatternField,
metadata: &ClientMetadata,
is_generic: bool,
generic_value_type: Option<&str>,
) -> String {
metadata.field_type_annotation(field, is_generic, generic_value_type, GenericSyntax::PYTHON)
}
@@ -6,12 +6,10 @@ use std::fmt::Write;
use brk_types::TreeNode;
use crate::{
ClientMetadata, PatternField, PythonSyntax, child_type_name, generate_leaf_field,
ClientMetadata, GenericSyntax, PatternField, PythonSyntax, child_type_name, generate_leaf_field,
get_node_fields, get_pattern_instance_base, prepare_tree_node, to_snake_case,
};
use super::client::field_type_with_generic;
/// Generate tree classes
pub fn generate_tree_classes(output: &mut String, catalog: &TreeNode, metadata: &ClientMetadata) {
writeln!(output, "# Catalog tree classes\n").unwrap();
@@ -54,12 +52,13 @@ fn generate_tree_class(
for ((field, child_fields_opt), (child_name, child_node)) in
ctx.fields_with_child_info.iter().zip(ctx.children.iter())
{
// Look up type parameter for generic patterns
let generic_value_type = child_fields_opt
.as_ref()
.and_then(|cf| metadata.get_type_param(cf))
.map(String::as_str);
let py_type = field_type_with_generic(field, metadata, false, generic_value_type);
let py_type = metadata.resolve_tree_field_type(
field,
child_fields_opt.as_deref(),
name,
child_name,
GenericSyntax::PYTHON,
);
let field_name_py = to_snake_case(&field.name);
if metadata.is_pattern_type(&field.rust_type) && metadata.is_parameterizable(&field.rust_type)
@@ -3,9 +3,8 @@
use std::fmt::Write;
use crate::{
ClientMetadata, GenericSyntax, IndexSetPattern, PatternField, RustSyntax,
StructuralPattern, generate_parameterized_field, generate_tree_path_field,
index_to_field_name, to_snake_case,
ClientMetadata, GenericSyntax, IndexSetPattern, RustSyntax, StructuralPattern,
generate_parameterized_field, generate_tree_path_field, index_to_field_name, to_snake_case,
};
/// Generate import statements.
@@ -315,7 +314,7 @@ pub fn generate_pattern_structs(
for field in &pattern.fields {
let field_name = to_snake_case(&field.name);
let type_annotation =
field_type_with_generic(field, metadata, pattern.is_generic, None);
metadata.field_type_annotation(field, pattern.is_generic, None, GenericSyntax::RUST);
writeln!(output, " pub {}: {},", field_name, type_annotation).unwrap();
}
@@ -368,13 +367,3 @@ pub fn generate_pattern_structs(
writeln!(output, "}}\n").unwrap();
}
}
/// Get Rust type annotation for a field with optional generic value type.
pub fn field_type_with_generic(
field: &PatternField,
metadata: &ClientMetadata,
is_generic: bool,
generic_value_type: Option<&str>,
) -> String {
metadata.field_type_annotation(field, is_generic, generic_value_type, GenericSyntax::RUST)
}
@@ -6,13 +6,11 @@ use std::fmt::Write;
use brk_types::TreeNode;
use crate::{
ClientMetadata, LanguageSyntax, PatternField, RustSyntax, child_type_name,
ClientMetadata, GenericSyntax, LanguageSyntax, PatternField, RustSyntax, child_type_name,
generate_leaf_field, generate_tree_node_field, get_node_fields, get_pattern_instance_base,
prepare_tree_node, to_snake_case,
};
use super::client::field_type_with_generic;
/// Generate tree structs.
pub fn generate_tree(output: &mut String, catalog: &TreeNode, metadata: &ClientMetadata) {
writeln!(output, "// Catalog tree\n").unwrap();
@@ -49,10 +47,11 @@ fn generate_tree_node(
{
let field_name = to_snake_case(&field.name);
let type_annotation = metadata.resolve_tree_field_type(
field,
child_fields.as_deref(),
name,
child_name,
|generic| field_type_with_generic(field, metadata, false, generic),
GenericSyntax::RUST,
);
writeln!(output, " pub {}: {},", field_name, type_annotation).unwrap();
}
+7 -9
View File
@@ -85,25 +85,23 @@ impl ClientMetadata {
}
/// Resolve the type name for a tree field, considering parameterizability.
/// If the field matches a parameterizable pattern, returns type annotation from callback.
/// If the field matches a parameterizable pattern, returns type annotation.
/// Otherwise returns the inline type name (parent_child format).
pub fn resolve_tree_field_type<F>(
pub fn resolve_tree_field_type(
&self,
field: &PatternField,
child_fields: Option<&[PatternField]>,
parent_name: &str,
child_name: &str,
type_annotation_fn: F,
) -> String
where
F: FnOnce(Option<&str>) -> String,
{
syntax: GenericSyntax,
) -> String {
match child_fields {
Some(cf) if self.is_parameterizable_fields(cf) => {
let generic_value_type = self.get_type_param(cf).map(String::as_str);
type_annotation_fn(generic_value_type)
self.field_type_annotation(field, false, generic_value_type, syntax)
}
Some(_) => crate::child_type_name(parent_name, child_name),
None => type_annotation_fn(None),
None => self.field_type_annotation(field, false, None, syntax),
}
}
+26 -1
View File
@@ -26,6 +26,31 @@ impl GenericSyntax {
pub const RUST: Self = Self { open: '<', close: '>', default_type: "_" };
pub fn wrap(&self, name: &str, type_param: &str) -> String {
format!("{}{}{}{}", name, self.open, type_param, self.close)
// Convert the type_param from Rust syntax to target syntax
let converted = self.convert(type_param);
format!("{}{}{}{}", name, self.open, converted, self.close)
}
/// Convert a type string from Rust generic syntax to target language syntax.
///
/// For Python, wrapper newtypes like `Close<Cents>` are flattened to just `Cents`
/// because Python type aliases can't be parameterized. This matches JS behavior.
pub fn convert(&self, type_str: &str) -> String {
// Flatten nested generics to innermost type (e.g., Close<Cents> -> Cents)
// This is needed because wrapper types like Close, Open, High, Low are
// just type aliases in generated code, not actual generic classes.
extract_inner_type_recursive(type_str)
}
}
/// Extract the innermost type from nested generics.
/// E.g., `Close<Cents>` -> `Cents`, `Foo<Bar<Baz>>` -> `Baz`
fn extract_inner_type_recursive(type_str: &str) -> String {
if let Some(start) = type_str.find('<') {
if let Some(end) = type_str.rfind('>') {
let inner = &type_str[start + 1..end];
return extract_inner_type_recursive(inner);
}
}
type_str.to_string()
}
+205 -205
View File
@@ -2655,56 +2655,6 @@ impl Price111dSmaPattern {
}
}
/// Pattern struct for repeated tree structure.
pub struct ActivePriceRatioPattern {
pub ratio: MetricPattern4<StoredF32>,
pub ratio_1m_sma: MetricPattern4<StoredF32>,
pub ratio_1w_sma: MetricPattern4<StoredF32>,
pub ratio_1y_sd: Ratio1ySdPattern,
pub ratio_2y_sd: Ratio1ySdPattern,
pub ratio_4y_sd: Ratio1ySdPattern,
pub ratio_pct1: MetricPattern4<StoredF32>,
pub ratio_pct1_usd: MetricPattern4<Dollars>,
pub ratio_pct2: MetricPattern4<StoredF32>,
pub ratio_pct2_usd: MetricPattern4<Dollars>,
pub ratio_pct5: MetricPattern4<StoredF32>,
pub ratio_pct5_usd: MetricPattern4<Dollars>,
pub ratio_pct95: MetricPattern4<StoredF32>,
pub ratio_pct95_usd: MetricPattern4<Dollars>,
pub ratio_pct98: MetricPattern4<StoredF32>,
pub ratio_pct98_usd: MetricPattern4<Dollars>,
pub ratio_pct99: MetricPattern4<StoredF32>,
pub ratio_pct99_usd: MetricPattern4<Dollars>,
pub ratio_sd: Ratio1ySdPattern,
}
impl ActivePriceRatioPattern {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
ratio: MetricPattern4::new(client.clone(), acc.clone()),
ratio_1m_sma: MetricPattern4::new(client.clone(), _m(&acc, "1m_sma")),
ratio_1w_sma: MetricPattern4::new(client.clone(), _m(&acc, "1w_sma")),
ratio_1y_sd: Ratio1ySdPattern::new(client.clone(), _m(&acc, "1y")),
ratio_2y_sd: Ratio1ySdPattern::new(client.clone(), _m(&acc, "2y")),
ratio_4y_sd: Ratio1ySdPattern::new(client.clone(), _m(&acc, "4y")),
ratio_pct1: MetricPattern4::new(client.clone(), _m(&acc, "pct1")),
ratio_pct1_usd: MetricPattern4::new(client.clone(), _m(&acc, "pct1_usd")),
ratio_pct2: MetricPattern4::new(client.clone(), _m(&acc, "pct2")),
ratio_pct2_usd: MetricPattern4::new(client.clone(), _m(&acc, "pct2_usd")),
ratio_pct5: MetricPattern4::new(client.clone(), _m(&acc, "pct5")),
ratio_pct5_usd: MetricPattern4::new(client.clone(), _m(&acc, "pct5_usd")),
ratio_pct95: MetricPattern4::new(client.clone(), _m(&acc, "pct95")),
ratio_pct95_usd: MetricPattern4::new(client.clone(), _m(&acc, "pct95_usd")),
ratio_pct98: MetricPattern4::new(client.clone(), _m(&acc, "pct98")),
ratio_pct98_usd: MetricPattern4::new(client.clone(), _m(&acc, "pct98_usd")),
ratio_pct99: MetricPattern4::new(client.clone(), _m(&acc, "pct99")),
ratio_pct99_usd: MetricPattern4::new(client.clone(), _m(&acc, "pct99_usd")),
ratio_sd: Ratio1ySdPattern::new(client.clone(), acc.clone()),
}
}
}
/// Pattern struct for repeated tree structure.
pub struct PercentilesPattern {
pub cost_basis_pct05: MetricPattern4<Dollars>,
@@ -2755,6 +2705,56 @@ impl PercentilesPattern {
}
}
/// Pattern struct for repeated tree structure.
pub struct ActivePriceRatioPattern {
pub ratio: MetricPattern4<StoredF32>,
pub ratio_1m_sma: MetricPattern4<StoredF32>,
pub ratio_1w_sma: MetricPattern4<StoredF32>,
pub ratio_1y_sd: Ratio1ySdPattern,
pub ratio_2y_sd: Ratio1ySdPattern,
pub ratio_4y_sd: Ratio1ySdPattern,
pub ratio_pct1: MetricPattern4<StoredF32>,
pub ratio_pct1_usd: MetricPattern4<Dollars>,
pub ratio_pct2: MetricPattern4<StoredF32>,
pub ratio_pct2_usd: MetricPattern4<Dollars>,
pub ratio_pct5: MetricPattern4<StoredF32>,
pub ratio_pct5_usd: MetricPattern4<Dollars>,
pub ratio_pct95: MetricPattern4<StoredF32>,
pub ratio_pct95_usd: MetricPattern4<Dollars>,
pub ratio_pct98: MetricPattern4<StoredF32>,
pub ratio_pct98_usd: MetricPattern4<Dollars>,
pub ratio_pct99: MetricPattern4<StoredF32>,
pub ratio_pct99_usd: MetricPattern4<Dollars>,
pub ratio_sd: Ratio1ySdPattern,
}
impl ActivePriceRatioPattern {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
ratio: MetricPattern4::new(client.clone(), acc.clone()),
ratio_1m_sma: MetricPattern4::new(client.clone(), _m(&acc, "1m_sma")),
ratio_1w_sma: MetricPattern4::new(client.clone(), _m(&acc, "1w_sma")),
ratio_1y_sd: Ratio1ySdPattern::new(client.clone(), _m(&acc, "1y")),
ratio_2y_sd: Ratio1ySdPattern::new(client.clone(), _m(&acc, "2y")),
ratio_4y_sd: Ratio1ySdPattern::new(client.clone(), _m(&acc, "4y")),
ratio_pct1: MetricPattern4::new(client.clone(), _m(&acc, "pct1")),
ratio_pct1_usd: MetricPattern4::new(client.clone(), _m(&acc, "pct1_usd")),
ratio_pct2: MetricPattern4::new(client.clone(), _m(&acc, "pct2")),
ratio_pct2_usd: MetricPattern4::new(client.clone(), _m(&acc, "pct2_usd")),
ratio_pct5: MetricPattern4::new(client.clone(), _m(&acc, "pct5")),
ratio_pct5_usd: MetricPattern4::new(client.clone(), _m(&acc, "pct5_usd")),
ratio_pct95: MetricPattern4::new(client.clone(), _m(&acc, "pct95")),
ratio_pct95_usd: MetricPattern4::new(client.clone(), _m(&acc, "pct95_usd")),
ratio_pct98: MetricPattern4::new(client.clone(), _m(&acc, "pct98")),
ratio_pct98_usd: MetricPattern4::new(client.clone(), _m(&acc, "pct98_usd")),
ratio_pct99: MetricPattern4::new(client.clone(), _m(&acc, "pct99")),
ratio_pct99_usd: MetricPattern4::new(client.clone(), _m(&acc, "pct99_usd")),
ratio_sd: Ratio1ySdPattern::new(client.clone(), acc.clone()),
}
}
}
/// Pattern struct for repeated tree structure.
pub struct RelativePattern5 {
pub neg_unrealized_loss_rel_to_market_cap: MetricPattern1<StoredF32>,
@@ -2953,10 +2953,10 @@ impl<T: DeserializeOwned> PeriodAveragePricePattern<T> {
}
/// Pattern struct for repeated tree structure.
pub struct DollarsPattern<T> {
pub struct FullnessPattern<T> {
pub average: MetricPattern2<T>,
pub base: MetricPattern11<T>,
pub cumulative: MetricPattern1<T>,
pub cumulative: MetricPattern2<T>,
pub max: MetricPattern2<T>,
pub median: MetricPattern6<T>,
pub min: MetricPattern2<T>,
@@ -2967,13 +2967,13 @@ pub struct DollarsPattern<T> {
pub sum: MetricPattern2<T>,
}
impl<T: DeserializeOwned> DollarsPattern<T> {
impl<T: DeserializeOwned> FullnessPattern<T> {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
average: MetricPattern2::new(client.clone(), _m(&acc, "average")),
base: MetricPattern11::new(client.clone(), acc.clone()),
cumulative: MetricPattern1::new(client.clone(), _m(&acc, "cumulative")),
cumulative: MetricPattern2::new(client.clone(), _m(&acc, "cumulative")),
max: MetricPattern2::new(client.clone(), _m(&acc, "max")),
median: MetricPattern6::new(client.clone(), _m(&acc, "median")),
min: MetricPattern2::new(client.clone(), _m(&acc, "min")),
@@ -3020,10 +3020,10 @@ impl<T: DeserializeOwned> ClassAveragePricePattern<T> {
}
/// Pattern struct for repeated tree structure.
pub struct FullnessPattern<T> {
pub struct DollarsPattern<T> {
pub average: MetricPattern2<T>,
pub base: MetricPattern11<T>,
pub cumulative: MetricPattern2<T>,
pub cumulative: MetricPattern1<T>,
pub max: MetricPattern2<T>,
pub median: MetricPattern6<T>,
pub min: MetricPattern2<T>,
@@ -3034,13 +3034,13 @@ pub struct FullnessPattern<T> {
pub sum: MetricPattern2<T>,
}
impl<T: DeserializeOwned> FullnessPattern<T> {
impl<T: DeserializeOwned> DollarsPattern<T> {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
average: MetricPattern2::new(client.clone(), _m(&acc, "average")),
base: MetricPattern11::new(client.clone(), acc.clone()),
cumulative: MetricPattern2::new(client.clone(), _m(&acc, "cumulative")),
cumulative: MetricPattern1::new(client.clone(), _m(&acc, "cumulative")),
max: MetricPattern2::new(client.clone(), _m(&acc, "max")),
median: MetricPattern6::new(client.clone(), _m(&acc, "median")),
min: MetricPattern2::new(client.clone(), _m(&acc, "min")),
@@ -3263,27 +3263,27 @@ impl _10yTo12yPattern {
}
/// Pattern struct for repeated tree structure.
pub struct PeriodCagrPattern {
pub _10y: MetricPattern4<StoredF32>,
pub _2y: MetricPattern4<StoredF32>,
pub _3y: MetricPattern4<StoredF32>,
pub _4y: MetricPattern4<StoredF32>,
pub _5y: MetricPattern4<StoredF32>,
pub _6y: MetricPattern4<StoredF32>,
pub _8y: MetricPattern4<StoredF32>,
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 PeriodCagrPattern {
impl _10yPattern {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
_10y: MetricPattern4::new(client.clone(), if acc.is_empty() { "10y".to_string() } else { format!("10y_{acc}") }),
_2y: MetricPattern4::new(client.clone(), if acc.is_empty() { "2y".to_string() } else { format!("2y_{acc}") }),
_3y: MetricPattern4::new(client.clone(), if acc.is_empty() { "3y".to_string() } else { format!("3y_{acc}") }),
_4y: MetricPattern4::new(client.clone(), if acc.is_empty() { "4y".to_string() } else { format!("4y_{acc}") }),
_5y: MetricPattern4::new(client.clone(), if acc.is_empty() { "5y".to_string() } else { format!("5y_{acc}") }),
_6y: MetricPattern4::new(client.clone(), if acc.is_empty() { "6y".to_string() } else { format!("6y_{acc}") }),
_8y: MetricPattern4::new(client.clone(), if acc.is_empty() { "8y".to_string() } else { format!("8y_{acc}") }),
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()),
}
}
}
@@ -3314,32 +3314,6 @@ impl _0satsPattern2 {
}
}
/// Pattern struct for repeated tree structure.
pub struct UnrealizedPattern {
pub neg_unrealized_loss: MetricPattern1<Dollars>,
pub net_unrealized_pnl: MetricPattern1<Dollars>,
pub supply_in_loss: ActiveSupplyPattern,
pub supply_in_profit: ActiveSupplyPattern,
pub total_unrealized_pnl: MetricPattern1<Dollars>,
pub unrealized_loss: MetricPattern1<Dollars>,
pub unrealized_profit: MetricPattern1<Dollars>,
}
impl UnrealizedPattern {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, 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 _100btcPattern {
pub activity: ActivityPattern2,
@@ -3367,27 +3341,53 @@ impl _100btcPattern {
}
/// 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,
pub struct PeriodCagrPattern {
pub _10y: MetricPattern4<StoredF32>,
pub _2y: MetricPattern4<StoredF32>,
pub _3y: MetricPattern4<StoredF32>,
pub _4y: MetricPattern4<StoredF32>,
pub _5y: MetricPattern4<StoredF32>,
pub _6y: MetricPattern4<StoredF32>,
pub _8y: MetricPattern4<StoredF32>,
}
impl _10yPattern {
impl PeriodCagrPattern {
/// 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()),
_10y: MetricPattern4::new(client.clone(), if acc.is_empty() { "10y".to_string() } else { format!("10y_{acc}") }),
_2y: MetricPattern4::new(client.clone(), if acc.is_empty() { "2y".to_string() } else { format!("2y_{acc}") }),
_3y: MetricPattern4::new(client.clone(), if acc.is_empty() { "3y".to_string() } else { format!("3y_{acc}") }),
_4y: MetricPattern4::new(client.clone(), if acc.is_empty() { "4y".to_string() } else { format!("4y_{acc}") }),
_5y: MetricPattern4::new(client.clone(), if acc.is_empty() { "5y".to_string() } else { format!("5y_{acc}") }),
_6y: MetricPattern4::new(client.clone(), if acc.is_empty() { "6y".to_string() } else { format!("6y_{acc}") }),
_8y: MetricPattern4::new(client.clone(), if acc.is_empty() { "8y".to_string() } else { format!("8y_{acc}") }),
}
}
}
/// Pattern struct for repeated tree structure.
pub struct UnrealizedPattern {
pub neg_unrealized_loss: MetricPattern1<Dollars>,
pub net_unrealized_pnl: MetricPattern1<Dollars>,
pub supply_in_loss: ActiveSupplyPattern,
pub supply_in_profit: ActiveSupplyPattern,
pub total_unrealized_pnl: MetricPattern1<Dollars>,
pub unrealized_loss: MetricPattern1<Dollars>,
pub unrealized_profit: MetricPattern1<Dollars>,
}
impl UnrealizedPattern {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, 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")),
}
}
}
@@ -3434,42 +3434,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 ActiveSupplyPattern {
pub bitcoin: MetricPattern1<Bitcoin>,
pub dollars: MetricPattern1<Dollars>,
pub sats: MetricPattern1<Sats>,
}
impl ActiveSupplyPattern {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, 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 UnclaimedRewardsPattern {
pub bitcoin: BitcoinPattern<Bitcoin>,
@@ -3488,24 +3452,6 @@ impl UnclaimedRewardsPattern {
}
}
/// Pattern struct for repeated tree structure.
pub struct SegwitAdoptionPattern {
pub base: MetricPattern11<StoredF32>,
pub cumulative: MetricPattern2<StoredF32>,
pub sum: MetricPattern2<StoredF32>,
}
impl SegwitAdoptionPattern {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, 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")),
}
}
}
/// Pattern struct for repeated tree structure.
pub struct CostBasisPattern2 {
pub max: MetricPattern1<Dollars>,
@@ -3523,6 +3469,24 @@ impl CostBasisPattern2 {
}
}
/// 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 CoinbasePattern2 {
pub bitcoin: BlockCountPattern<Bitcoin>,
@@ -3560,17 +3524,37 @@ impl _2015Pattern {
}
/// Pattern struct for repeated tree structure.
pub struct SupplyPattern2 {
pub halved: ActiveSupplyPattern,
pub total: ActiveSupplyPattern,
pub struct SegwitAdoptionPattern {
pub base: MetricPattern11<StoredF32>,
pub cumulative: MetricPattern2<StoredF32>,
pub sum: MetricPattern2<StoredF32>,
}
impl SupplyPattern2 {
impl SegwitAdoptionPattern {
/// 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()),
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<Bitcoin>,
pub dollars: MetricPattern1<Dollars>,
pub sats: MetricPattern1<Sats>,
}
impl ActiveSupplyPattern {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, 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()),
}
}
}
@@ -3607,6 +3591,22 @@ impl CostBasisPattern {
}
}
/// 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<BrkClientBase>, acc: String) -> Self {
Self {
halved: ActiveSupplyPattern::new(client.clone(), _m(&acc, "half")),
total: ActiveSupplyPattern::new(client.clone(), acc.clone()),
}
}
}
/// Pattern struct for repeated tree structure.
pub struct RelativePattern4 {
pub supply_in_loss_rel_to_own_supply: MetricPattern1<StoredF64>,
@@ -3623,6 +3623,21 @@ impl RelativePattern4 {
}
}
/// 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")),
}
}
}
/// Pattern struct for repeated tree structure.
pub struct BitcoinPattern<T> {
pub cumulative: MetricPattern2<T>,
@@ -3639,21 +3654,6 @@ impl<T: DeserializeOwned> BitcoinPattern<T> {
}
}
/// 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")),
}
}
}
/// Pattern struct for repeated tree structure.
pub struct BlockCountPattern<T> {
pub cumulative: MetricPattern1<T>,
@@ -3670,20 +3670,6 @@ impl<T: DeserializeOwned> BlockCountPattern<T> {
}
}
/// 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")),
}
}
}
/// Pattern struct for repeated tree structure.
pub struct OutputsPattern {
pub utxo_count: MetricPattern1<StoredU64>,
@@ -3698,6 +3684,20 @@ 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")),
}
}
}
// Catalog tree
/// Catalog tree node.
+3136 -2308
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -1563,7 +1563,7 @@
<link rel="modulepreload" href="/scripts/entry.fe229b42.js">
<link rel="modulepreload" href="/scripts/lazy.1ae52534.js">
<link rel="modulepreload" href="/scripts/main.22a5bd79.js">
<link rel="modulepreload" href="/scripts/modules/brk-client/index.469dfd9f.js">
<link rel="modulepreload" href="/scripts/modules/brk-client/index.b24ba2c8.js">
<link rel="modulepreload" href="/scripts/modules/brk-client/tests/basic.b92ff866.js">
<link rel="modulepreload" href="/scripts/modules/brk-client/tests/tree.ba9474f7.js">
<link rel="modulepreload" href="/scripts/modules/lean-qr/2.6.1/index.09195c13.mjs">
@@ -1634,7 +1634,7 @@
"/scripts/entry.js": "/scripts/entry.fe229b42.js",
"/scripts/lazy.js": "/scripts/lazy.1ae52534.js",
"/scripts/main.js": "/scripts/main.22a5bd79.js",
"/scripts/modules/brk-client/index.js": "/scripts/modules/brk-client/index.469dfd9f.js",
"/scripts/modules/brk-client/index.js": "/scripts/modules/brk-client/index.b24ba2c8.js",
"/scripts/modules/brk-client/tests/basic.js": "/scripts/modules/brk-client/tests/basic.b92ff866.js",
"/scripts/modules/brk-client/tests/tree.js": "/scripts/modules/brk-client/tests/tree.ba9474f7.js",
"/scripts/modules/lean-qr/2.6.1/index.mjs": "/scripts/modules/lean-qr/2.6.1/index.09195c13.mjs",