mirror of
https://github.com/bitcoinresearchkit/brk.git
synced 2026-04-24 06:39:58 -07:00
global: snapshot
This commit is contained in:
@@ -214,7 +214,7 @@ function _wrapSeriesData(raw) {{
|
||||
|
||||
/**
|
||||
* @template T
|
||||
* @typedef {{Object}} SeriesEndpointBuilder
|
||||
* @typedef {{Object}} SeriesEndpoint
|
||||
* @property {{(index: number) => SingleItemBuilder<T>}} get - Get single item at index
|
||||
* @property {{(start?: number, end?: number) => RangeBuilder<T>}} slice - Slice by index
|
||||
* @property {{(n: number) => RangeBuilder<T>}} first - Get first n items
|
||||
@@ -228,7 +228,7 @@ function _wrapSeriesData(raw) {{
|
||||
|
||||
/**
|
||||
* @template T
|
||||
* @typedef {{Object}} DateSeriesEndpointBuilder
|
||||
* @typedef {{Object}} DateSeriesEndpoint
|
||||
* @property {{(index: number | globalThis.Date) => DateSingleItemBuilder<T>}} get - Get single item at index or Date
|
||||
* @property {{(start?: number | globalThis.Date, end?: number | globalThis.Date) => DateRangeBuilder<T>}} slice - Slice by index or Date
|
||||
* @property {{(n: number) => DateRangeBuilder<T>}} first - Get first n items
|
||||
@@ -240,7 +240,7 @@ function _wrapSeriesData(raw) {{
|
||||
* @property {{string}} path - The endpoint path
|
||||
*/
|
||||
|
||||
/** @typedef {{SeriesEndpointBuilder<any>}} AnySeriesEndpointBuilder */
|
||||
/** @typedef {{SeriesEndpoint<any>}} AnySeriesEndpoint */
|
||||
|
||||
/** @template T @typedef {{Object}} SingleItemBuilder
|
||||
* @property {{(onUpdate?: (value: SeriesData<T>) => void) => Promise<SeriesData<T>>}} fetch - Fetch the item
|
||||
@@ -284,9 +284,9 @@ function _wrapSeriesData(raw) {{
|
||||
* @template T
|
||||
* @typedef {{Object}} SeriesPattern
|
||||
* @property {{string}} name - The series name
|
||||
* @property {{Readonly<Partial<Record<Index, SeriesEndpointBuilder<T>>>>}} by - Index endpoints as lazy getters
|
||||
* @property {{Readonly<Partial<Record<Index, SeriesEndpoint<T>>>>}} by - Index endpoints as lazy getters
|
||||
* @property {{() => readonly Index[]}} indexes - Get the list of available indexes
|
||||
* @property {{(index: Index) => SeriesEndpointBuilder<T>|undefined}} get - Get an endpoint for a specific index
|
||||
* @property {{(index: Index) => SeriesEndpoint<T>|undefined}} get - Get an endpoint for a specific index
|
||||
*/
|
||||
|
||||
/** @typedef {{SeriesPattern<any>}} AnySeriesPattern */
|
||||
@@ -297,7 +297,7 @@ function _wrapSeriesData(raw) {{
|
||||
* @param {{BrkClientBase}} client
|
||||
* @param {{string}} name - The series vec name
|
||||
* @param {{Index}} index - The index name
|
||||
* @returns {{DateSeriesEndpointBuilder<T>}}
|
||||
* @returns {{DateSeriesEndpoint<T>}}
|
||||
*/
|
||||
function _endpoint(client, name, index) {{
|
||||
const p = `/api/series/${{name}}/${{index}}`;
|
||||
@@ -349,7 +349,7 @@ function _endpoint(client, name, index) {{
|
||||
then(resolve, reject) {{ return this.fetch().then(resolve, reject); }},
|
||||
}});
|
||||
|
||||
/** @type {{DateSeriesEndpointBuilder<T>}} */
|
||||
/** @type {{DateSeriesEndpoint<T>}} */
|
||||
const endpoint = {{
|
||||
get(idx) {{ if (idx instanceof Date) idx = dateToIndex(index, idx); return singleItemBuilder(idx); }},
|
||||
slice(start, end) {{
|
||||
@@ -615,7 +615,7 @@ function _mp(client, name, indexes) {{
|
||||
by,
|
||||
/** @returns {{readonly Index[]}} */
|
||||
indexes() {{ return indexes; }},
|
||||
/** @param {{Index}} index @returns {{SeriesEndpointBuilder<T>|undefined}} */
|
||||
/** @param {{Index}} index @returns {{SeriesEndpoint<T>|undefined}} */
|
||||
get(index) {{ return indexes.includes(index) ? _endpoint(client, name, index) : undefined; }}
|
||||
}};
|
||||
}}
|
||||
@@ -631,9 +631,9 @@ function _mp(client, name, indexes) {{
|
||||
.iter()
|
||||
.map(|idx| {
|
||||
let builder = if idx.is_date_based() {
|
||||
"DateSeriesEndpointBuilder"
|
||||
"DateSeriesEndpoint"
|
||||
} else {
|
||||
"SeriesEndpointBuilder"
|
||||
"SeriesEndpoint"
|
||||
};
|
||||
format!("readonly {}: {}<T>", idx.name(), builder)
|
||||
})
|
||||
@@ -642,7 +642,7 @@ function _mp(client, name, indexes) {{
|
||||
|
||||
writeln!(
|
||||
output,
|
||||
"/** @template T @typedef {{{{ name: string, by: {}, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpointBuilder<T>|undefined }}}} {} */",
|
||||
"/** @template T @typedef {{{{ name: string, by: {}, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }}}} {} */",
|
||||
by_type, pattern.name
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
@@ -152,7 +152,7 @@ pub fn generate_main_client(
|
||||
writeln!(output, " *").unwrap();
|
||||
writeln!(output, " * @param {{string}} series - The series name").unwrap();
|
||||
writeln!(output, " * @param {{Index}} index - The index name").unwrap();
|
||||
writeln!(output, " * @returns {{SeriesEndpointBuilder<unknown>}}").unwrap();
|
||||
writeln!(output, " * @returns {{SeriesEndpoint<unknown>}}").unwrap();
|
||||
writeln!(output, " */").unwrap();
|
||||
writeln!(output, " seriesEndpoint(series, index) {{").unwrap();
|
||||
writeln!(output, " return _endpoint(this, series, index);").unwrap();
|
||||
|
||||
@@ -36,7 +36,7 @@ pub fn generate_main_client(output: &mut String, endpoints: &[Endpoint]) {
|
||||
// Generate series_endpoint() method for dynamic series access
|
||||
writeln!(
|
||||
output,
|
||||
" def series_endpoint(self, series: str, index: Index) -> SeriesEndpointBuilder[Any]:"
|
||||
" def series_endpoint(self, series: str, index: Index) -> SeriesEndpoint[Any]:"
|
||||
)
|
||||
.unwrap();
|
||||
writeln!(
|
||||
@@ -58,7 +58,7 @@ pub fn generate_main_client(output: &mut String, endpoints: &[Endpoint]) {
|
||||
writeln!(output, " \"\"\"").unwrap();
|
||||
writeln!(
|
||||
output,
|
||||
" return SeriesEndpointBuilder(self, series, index)"
|
||||
" return SeriesEndpoint(self, series, index)"
|
||||
)
|
||||
.unwrap();
|
||||
writeln!(output).unwrap();
|
||||
|
||||
@@ -127,7 +127,7 @@ def _p(prefix: str, acc: str) -> str:
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
/// Generate the SeriesData and SeriesEndpointBuilder classes
|
||||
/// Generate the SeriesData and SeriesEndpoint classes
|
||||
pub fn generate_endpoint_class(output: &mut String) {
|
||||
writeln!(
|
||||
output,
|
||||
@@ -439,7 +439,7 @@ class DateSkippedBuilder(SkippedBuilder[T]):
|
||||
return self._config.get_date_series()
|
||||
|
||||
|
||||
class SeriesEndpointBuilder(Generic[T]):
|
||||
class SeriesEndpoint(Generic[T]):
|
||||
"""Builder for series endpoint queries with int-based indexing.
|
||||
|
||||
Examples:
|
||||
@@ -489,7 +489,7 @@ class SeriesEndpointBuilder(Generic[T]):
|
||||
return self._config.path()
|
||||
|
||||
|
||||
class DateSeriesEndpointBuilder(Generic[T]):
|
||||
class DateSeriesEndpoint(Generic[T]):
|
||||
"""Builder for series endpoint queries with date-based indexing.
|
||||
|
||||
Accepts dates in __getitem__ and returns DateSeriesData from fetch().
|
||||
@@ -553,8 +553,8 @@ class DateSeriesEndpointBuilder(Generic[T]):
|
||||
|
||||
|
||||
# Type aliases for non-generic usage
|
||||
AnySeriesEndpointBuilder = SeriesEndpointBuilder[Any]
|
||||
AnyDateSeriesEndpointBuilder = DateSeriesEndpointBuilder[Any]
|
||||
AnySeriesEndpoint = SeriesEndpoint[Any]
|
||||
AnyDateSeriesEndpoint = DateSeriesEndpoint[Any]
|
||||
|
||||
|
||||
class SeriesPattern(Protocol[T]):
|
||||
@@ -569,7 +569,7 @@ class SeriesPattern(Protocol[T]):
|
||||
"""Get the list of available indexes for this series."""
|
||||
...
|
||||
|
||||
def get(self, index: Index) -> Optional[SeriesEndpointBuilder[T]]:
|
||||
def get(self, index: Index) -> Optional[SeriesEndpoint[T]]:
|
||||
"""Get an endpoint builder for a specific index, if supported."""
|
||||
...
|
||||
|
||||
@@ -605,11 +605,11 @@ pub fn generate_index_accessors(output: &mut String, patterns: &[IndexSetPattern
|
||||
// Generate helper functions
|
||||
writeln!(
|
||||
output,
|
||||
r#"def _ep(c: BrkClientBase, n: str, i: Index) -> SeriesEndpointBuilder[Any]:
|
||||
return SeriesEndpointBuilder(c, n, i)
|
||||
r#"def _ep(c: BrkClientBase, n: str, i: Index) -> SeriesEndpoint[Any]:
|
||||
return SeriesEndpoint(c, n, i)
|
||||
|
||||
def _dep(c: BrkClientBase, n: str, i: Index) -> DateSeriesEndpointBuilder[Any]:
|
||||
return DateSeriesEndpointBuilder(c, n, i)
|
||||
def _dep(c: BrkClientBase, n: str, i: Index) -> DateSeriesEndpoint[Any]:
|
||||
return DateSeriesEndpoint(c, n, i)
|
||||
"#
|
||||
)
|
||||
.unwrap();
|
||||
@@ -631,9 +631,9 @@ def _dep(c: BrkClientBase, n: str, i: Index) -> DateSeriesEndpointBuilder[Any]:
|
||||
let method_name = index_to_field_name(index);
|
||||
let index_name = index.name();
|
||||
let (builder_type, helper) = if index.is_date_based() {
|
||||
("DateSeriesEndpointBuilder", "_dep")
|
||||
("DateSeriesEndpoint", "_dep")
|
||||
} else {
|
||||
("SeriesEndpointBuilder", "_ep")
|
||||
("SeriesEndpoint", "_ep")
|
||||
};
|
||||
writeln!(
|
||||
output,
|
||||
@@ -663,7 +663,7 @@ def _dep(c: BrkClientBase, n: str, i: Index) -> DateSeriesEndpointBuilder[Any]:
|
||||
.unwrap();
|
||||
writeln!(
|
||||
output,
|
||||
" def get(self, index: Index) -> Optional[SeriesEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in {} else None",
|
||||
" def get(self, index: Index) -> Optional[SeriesEndpoint[T]]: return _ep(self.by._c, self._n, index) if index in {} else None",
|
||||
idx_var
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
@@ -50,8 +50,8 @@ impl BrkClient {{
|
||||
/// .last(10)
|
||||
/// .json::<f64>()?;
|
||||
/// ```
|
||||
pub fn series_endpoint(&self, series: impl Into<Series>, index: Index) -> SeriesEndpointBuilder<serde_json::Value> {{
|
||||
SeriesEndpointBuilder::new(
|
||||
pub fn series_endpoint(&self, series: impl Into<SeriesName>, index: Index) -> SeriesEndpoint<serde_json::Value> {{
|
||||
SeriesEndpoint::new(
|
||||
self.base.clone(),
|
||||
Arc::from(series.into().as_str()),
|
||||
index,
|
||||
@@ -61,11 +61,11 @@ impl BrkClient {{
|
||||
/// Create a dynamic date-based series endpoint builder.
|
||||
///
|
||||
/// Returns `Err` if the index is not date-based.
|
||||
pub fn date_series_endpoint(&self, series: impl Into<Series>, index: Index) -> Result<DateSeriesEndpointBuilder<serde_json::Value>> {{
|
||||
pub fn date_series_endpoint(&self, series: impl Into<SeriesName>, index: Index) -> Result<DateSeriesEndpoint<serde_json::Value>> {{
|
||||
if !index.is_date_based() {{
|
||||
return Err(BrkError {{ message: format!("{{}} is not a date-based index", index.name()) }});
|
||||
}}
|
||||
Ok(DateSeriesEndpointBuilder::new(
|
||||
Ok(DateSeriesEndpoint::new(
|
||||
self.base.clone(),
|
||||
Arc::from(series.into().as_str()),
|
||||
index,
|
||||
@@ -217,7 +217,7 @@ fn param_type_to_rust(param_type: &str) -> String {
|
||||
"string" | "*" => "&str".to_string(),
|
||||
"integer" | "number" => "i64".to_string(),
|
||||
"boolean" => "bool".to_string(),
|
||||
other => other.to_string(), // Domain types like Index, Series, Format
|
||||
other => other.to_string(), // Domain types like Index, SeriesName, Format
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -140,7 +140,7 @@ pub trait AnySeriesPattern {{
|
||||
/// Generic trait for series patterns with endpoint access.
|
||||
pub trait SeriesPattern<T>: AnySeriesPattern {{
|
||||
/// Get an endpoint builder for a specific index, if supported.
|
||||
fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>>;
|
||||
fn get(&self, index: Index) -> Option<SeriesEndpoint<T>>;
|
||||
}}
|
||||
|
||||
"#
|
||||
@@ -148,7 +148,7 @@ pub trait SeriesPattern<T>: AnySeriesPattern {{
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
/// Generate the SeriesEndpointBuilder structs with typestate pattern.
|
||||
/// Generate the SeriesEndpoint structs with typestate pattern.
|
||||
pub fn generate_endpoint(output: &mut String) {
|
||||
writeln!(
|
||||
output,
|
||||
@@ -192,7 +192,7 @@ impl EndpointConfig {{
|
||||
/// Builder for series endpoint queries.
|
||||
///
|
||||
/// Parameterized by element type `T` and response type `D` (defaults to `SeriesData<T>`).
|
||||
/// For date-based indexes, use `DateSeriesEndpointBuilder<T>` which sets `D = DateSeriesData<T>`.
|
||||
/// For date-based indexes, use `DateSeriesEndpoint<T>` which sets `D = DateSeriesData<T>`.
|
||||
///
|
||||
/// # Examples
|
||||
/// ```ignore
|
||||
@@ -204,18 +204,18 @@ impl EndpointConfig {{
|
||||
/// let data = endpoint.last(10).fetch()?; // last 10
|
||||
/// let data = endpoint.skip(100).take(10).fetch()?; // iterator-style
|
||||
/// ```
|
||||
pub struct SeriesEndpointBuilder<T, D = SeriesData<T>> {{
|
||||
pub struct SeriesEndpoint<T, D = SeriesData<T>> {{
|
||||
config: EndpointConfig,
|
||||
_marker: std::marker::PhantomData<fn() -> (T, D)>,
|
||||
}}
|
||||
|
||||
/// Builder for date-based series endpoint queries.
|
||||
///
|
||||
/// Like `SeriesEndpointBuilder` but returns `DateSeriesData` and provides
|
||||
/// Like `SeriesEndpoint` but returns `DateSeriesData` and provides
|
||||
/// date-based access methods (`get_date`, `date_range`).
|
||||
pub type DateSeriesEndpointBuilder<T> = SeriesEndpointBuilder<T, DateSeriesData<T>>;
|
||||
pub type DateSeriesEndpoint<T> = SeriesEndpoint<T, DateSeriesData<T>>;
|
||||
|
||||
impl<T: DeserializeOwned, D: DeserializeOwned> SeriesEndpointBuilder<T, D> {{
|
||||
impl<T: DeserializeOwned, D: DeserializeOwned> SeriesEndpoint<T, D> {{
|
||||
pub fn new(client: Arc<BrkClientBase>, name: Arc<str>, index: Index) -> Self {{
|
||||
Self {{ config: EndpointConfig::new(client, name, index), _marker: std::marker::PhantomData }}
|
||||
}}
|
||||
@@ -286,8 +286,8 @@ impl<T: DeserializeOwned, D: DeserializeOwned> SeriesEndpointBuilder<T, D> {{
|
||||
}}
|
||||
}}
|
||||
|
||||
/// Date-specific methods available only on `DateSeriesEndpointBuilder`.
|
||||
impl<T: DeserializeOwned> SeriesEndpointBuilder<T, DateSeriesData<T>> {{
|
||||
/// Date-specific methods available only on `DateSeriesEndpoint`.
|
||||
impl<T: DeserializeOwned> SeriesEndpoint<T, DateSeriesData<T>> {{
|
||||
/// Select a specific date position (for day-precision or coarser indexes).
|
||||
pub fn get_date(self, date: Date) -> SingleItemBuilder<T, DateSeriesData<T>> {{
|
||||
let index = self.config.index.date_to_index(date).unwrap_or(0);
|
||||
@@ -414,13 +414,13 @@ pub fn generate_index_accessors(output: &mut String, patterns: &[IndexSetPattern
|
||||
writeln!(
|
||||
output,
|
||||
r#"#[inline]
|
||||
fn _ep<T: DeserializeOwned>(c: &Arc<BrkClientBase>, n: &Arc<str>, i: Index) -> SeriesEndpointBuilder<T> {{
|
||||
SeriesEndpointBuilder::new(c.clone(), n.clone(), i)
|
||||
fn _ep<T: DeserializeOwned>(c: &Arc<BrkClientBase>, n: &Arc<str>, i: Index) -> SeriesEndpoint<T> {{
|
||||
SeriesEndpoint::new(c.clone(), n.clone(), i)
|
||||
}}
|
||||
|
||||
#[inline]
|
||||
fn _dep<T: DeserializeOwned>(c: &Arc<BrkClientBase>, n: &Arc<str>, i: Index) -> DateSeriesEndpointBuilder<T> {{
|
||||
DateSeriesEndpointBuilder::new(c.clone(), n.clone(), i)
|
||||
fn _dep<T: DeserializeOwned>(c: &Arc<BrkClientBase>, n: &Arc<str>, i: Index) -> DateSeriesEndpoint<T> {{
|
||||
DateSeriesEndpoint::new(c.clone(), n.clone(), i)
|
||||
}}
|
||||
"#
|
||||
)
|
||||
@@ -441,14 +441,14 @@ fn _dep<T: DeserializeOwned>(c: &Arc<BrkClientBase>, n: &Arc<str>, i: Index) ->
|
||||
if index.is_date_based() {
|
||||
writeln!(
|
||||
output,
|
||||
" pub fn {}(&self) -> DateSeriesEndpointBuilder<T> {{ _dep(&self.client, &self.name, Index::{}) }}",
|
||||
" pub fn {}(&self) -> DateSeriesEndpoint<T> {{ _dep(&self.client, &self.name, Index::{}) }}",
|
||||
method_name, index
|
||||
)
|
||||
.unwrap();
|
||||
} else {
|
||||
writeln!(
|
||||
output,
|
||||
" pub fn {}(&self) -> SeriesEndpointBuilder<T> {{ _ep(&self.client, &self.name, Index::{}) }}",
|
||||
" pub fn {}(&self) -> SeriesEndpoint<T> {{ _ep(&self.client, &self.name, Index::{}) }}",
|
||||
method_name, index
|
||||
)
|
||||
.unwrap();
|
||||
@@ -484,7 +484,7 @@ fn _dep<T: DeserializeOwned>(c: &Arc<BrkClientBase>, n: &Arc<str>, i: Index) ->
|
||||
// Implement SeriesPattern<T> trait
|
||||
writeln!(
|
||||
output,
|
||||
"impl<T: DeserializeOwned> SeriesPattern<T> for {}<T> {{ fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> {{ {}.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) }} }}\n",
|
||||
"impl<T: DeserializeOwned> SeriesPattern<T> for {}<T> {{ fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> {{ {}.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) }} }}\n",
|
||||
pattern.name, idx_const
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//! Basic example of using the BRK client.
|
||||
|
||||
use brk_client::{BrkClient, BrkClientOptions};
|
||||
use brk_types::{FormatResponse, Index, Metric, RangeIndex};
|
||||
use brk_types::{FormatResponse, Index, RangeIndex};
|
||||
|
||||
fn main() -> brk_client::Result<()> {
|
||||
// Create client with default options
|
||||
@@ -16,7 +16,7 @@ fn main() -> brk_client::Result<()> {
|
||||
// Fetch price data using the typed metrics API
|
||||
// day1() returns DateMetricEndpointBuilder, so fetch() returns DateMetricData
|
||||
let price_close = client
|
||||
.metrics()
|
||||
.series()
|
||||
.prices
|
||||
.split
|
||||
.close
|
||||
@@ -37,7 +37,7 @@ fn main() -> brk_client::Result<()> {
|
||||
|
||||
// Fetch block data with height index (non-date, returns MetricData)
|
||||
let block_count = client
|
||||
.metrics()
|
||||
.series()
|
||||
.blocks
|
||||
.count
|
||||
.total
|
||||
@@ -53,9 +53,9 @@ fn main() -> brk_client::Result<()> {
|
||||
}
|
||||
|
||||
// Fetch supply data as CSV
|
||||
dbg!(client.metrics().supply.circulating.btc.by.day1().path());
|
||||
dbg!(client.series().supply.circulating.btc.by.day1().path());
|
||||
let circulating = client
|
||||
.metrics()
|
||||
.series()
|
||||
.supply
|
||||
.circulating
|
||||
.btc
|
||||
@@ -67,7 +67,7 @@ fn main() -> brk_client::Result<()> {
|
||||
|
||||
// Using dynamic metric fetching with date_metric() for date-based indexes
|
||||
let date_metric = client
|
||||
.date_metric(Metric::from("price_close"), Index::Day1)?
|
||||
.date_series_endpoint("price_close", Index::Day1)?
|
||||
.last(3)
|
||||
.fetch()?;
|
||||
println!("Dynamic date metric fetch:");
|
||||
@@ -76,8 +76,8 @@ fn main() -> brk_client::Result<()> {
|
||||
}
|
||||
|
||||
// Using generic metric fetching (returns FormatResponse)
|
||||
let metricdata = client.get_metric(
|
||||
Metric::from("price_close"),
|
||||
let metricdata = client.get_series(
|
||||
"price_close".into(),
|
||||
Index::Day1,
|
||||
Some(RangeIndex::Int(-3)),
|
||||
None,
|
||||
|
||||
@@ -120,7 +120,7 @@ pub trait AnySeriesPattern {
|
||||
/// Generic trait for series patterns with endpoint access.
|
||||
pub trait SeriesPattern<T>: AnySeriesPattern {
|
||||
/// Get an endpoint builder for a specific index, if supported.
|
||||
fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>>;
|
||||
fn get(&self, index: Index) -> Option<SeriesEndpoint<T>>;
|
||||
}
|
||||
|
||||
|
||||
@@ -164,7 +164,7 @@ impl EndpointConfig {
|
||||
/// Builder for series endpoint queries.
|
||||
///
|
||||
/// Parameterized by element type `T` and response type `D` (defaults to `SeriesData<T>`).
|
||||
/// For date-based indexes, use `DateSeriesEndpointBuilder<T>` which sets `D = DateSeriesData<T>`.
|
||||
/// For date-based indexes, use `DateSeriesEndpoint<T>` which sets `D = DateSeriesData<T>`.
|
||||
///
|
||||
/// # Examples
|
||||
/// ```ignore
|
||||
@@ -176,18 +176,18 @@ impl EndpointConfig {
|
||||
/// let data = endpoint.last(10).fetch()?; // last 10
|
||||
/// let data = endpoint.skip(100).take(10).fetch()?; // iterator-style
|
||||
/// ```
|
||||
pub struct SeriesEndpointBuilder<T, D = SeriesData<T>> {
|
||||
pub struct SeriesEndpoint<T, D = SeriesData<T>> {
|
||||
config: EndpointConfig,
|
||||
_marker: std::marker::PhantomData<fn() -> (T, D)>,
|
||||
}
|
||||
|
||||
/// Builder for date-based series endpoint queries.
|
||||
///
|
||||
/// Like `SeriesEndpointBuilder` but returns `DateSeriesData` and provides
|
||||
/// Like `SeriesEndpoint` but returns `DateSeriesData` and provides
|
||||
/// date-based access methods (`get_date`, `date_range`).
|
||||
pub type DateSeriesEndpointBuilder<T> = SeriesEndpointBuilder<T, DateSeriesData<T>>;
|
||||
pub type DateSeriesEndpoint<T> = SeriesEndpoint<T, DateSeriesData<T>>;
|
||||
|
||||
impl<T: DeserializeOwned, D: DeserializeOwned> SeriesEndpointBuilder<T, D> {
|
||||
impl<T: DeserializeOwned, D: DeserializeOwned> SeriesEndpoint<T, D> {
|
||||
pub fn new(client: Arc<BrkClientBase>, name: Arc<str>, index: Index) -> Self {
|
||||
Self { config: EndpointConfig::new(client, name, index), _marker: std::marker::PhantomData }
|
||||
}
|
||||
@@ -258,8 +258,8 @@ impl<T: DeserializeOwned, D: DeserializeOwned> SeriesEndpointBuilder<T, D> {
|
||||
}
|
||||
}
|
||||
|
||||
/// Date-specific methods available only on `DateSeriesEndpointBuilder`.
|
||||
impl<T: DeserializeOwned> SeriesEndpointBuilder<T, DateSeriesData<T>> {
|
||||
/// Date-specific methods available only on `DateSeriesEndpoint`.
|
||||
impl<T: DeserializeOwned> SeriesEndpoint<T, DateSeriesData<T>> {
|
||||
/// Select a specific date position (for day-precision or coarser indexes).
|
||||
pub fn get_date(self, date: Date) -> SingleItemBuilder<T, DateSeriesData<T>> {
|
||||
let index = self.config.index.date_to_index(date).unwrap_or(0);
|
||||
@@ -396,35 +396,35 @@ const _I34: &[Index] = &[Index::FundedAddressIndex];
|
||||
const _I35: &[Index] = &[Index::EmptyAddressIndex];
|
||||
|
||||
#[inline]
|
||||
fn _ep<T: DeserializeOwned>(c: &Arc<BrkClientBase>, n: &Arc<str>, i: Index) -> SeriesEndpointBuilder<T> {
|
||||
SeriesEndpointBuilder::new(c.clone(), n.clone(), i)
|
||||
fn _ep<T: DeserializeOwned>(c: &Arc<BrkClientBase>, n: &Arc<str>, i: Index) -> SeriesEndpoint<T> {
|
||||
SeriesEndpoint::new(c.clone(), n.clone(), i)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn _dep<T: DeserializeOwned>(c: &Arc<BrkClientBase>, n: &Arc<str>, i: Index) -> DateSeriesEndpointBuilder<T> {
|
||||
DateSeriesEndpointBuilder::new(c.clone(), n.clone(), i)
|
||||
fn _dep<T: DeserializeOwned>(c: &Arc<BrkClientBase>, n: &Arc<str>, i: Index) -> DateSeriesEndpoint<T> {
|
||||
DateSeriesEndpoint::new(c.clone(), n.clone(), i)
|
||||
}
|
||||
|
||||
// Index accessor structs
|
||||
|
||||
pub struct SeriesPattern1By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern1By<T> {
|
||||
pub fn minute10(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Minute10) }
|
||||
pub fn minute30(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Minute30) }
|
||||
pub fn hour1(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Hour1) }
|
||||
pub fn hour4(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Hour4) }
|
||||
pub fn hour12(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Hour12) }
|
||||
pub fn day1(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Day1) }
|
||||
pub fn day3(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Day3) }
|
||||
pub fn week1(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Week1) }
|
||||
pub fn month1(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Month1) }
|
||||
pub fn month3(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Month3) }
|
||||
pub fn month6(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Month6) }
|
||||
pub fn year1(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Year1) }
|
||||
pub fn year10(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Year10) }
|
||||
pub fn halving(&self) -> SeriesEndpointBuilder<T> { _ep(&self.client, &self.name, Index::Halving) }
|
||||
pub fn epoch(&self) -> SeriesEndpointBuilder<T> { _ep(&self.client, &self.name, Index::Epoch) }
|
||||
pub fn height(&self) -> SeriesEndpointBuilder<T> { _ep(&self.client, &self.name, Index::Height) }
|
||||
pub fn minute10(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Minute10) }
|
||||
pub fn minute30(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Minute30) }
|
||||
pub fn hour1(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Hour1) }
|
||||
pub fn hour4(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Hour4) }
|
||||
pub fn hour12(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Hour12) }
|
||||
pub fn day1(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Day1) }
|
||||
pub fn day3(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Day3) }
|
||||
pub fn week1(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Week1) }
|
||||
pub fn month1(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Month1) }
|
||||
pub fn month3(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Month3) }
|
||||
pub fn month6(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Month6) }
|
||||
pub fn year1(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Year1) }
|
||||
pub fn year10(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Year10) }
|
||||
pub fn halving(&self) -> SeriesEndpoint<T> { _ep(&self.client, &self.name, Index::Halving) }
|
||||
pub fn epoch(&self) -> SeriesEndpoint<T> { _ep(&self.client, &self.name, Index::Epoch) }
|
||||
pub fn height(&self) -> SeriesEndpoint<T> { _ep(&self.client, &self.name, Index::Height) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern1<T> { name: Arc<str>, pub by: SeriesPattern1By<T> }
|
||||
@@ -434,25 +434,25 @@ impl<T: DeserializeOwned> SeriesPattern1<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern1<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I1 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern1<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I1.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern1<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I1.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern2By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern2By<T> {
|
||||
pub fn minute10(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Minute10) }
|
||||
pub fn minute30(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Minute30) }
|
||||
pub fn hour1(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Hour1) }
|
||||
pub fn hour4(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Hour4) }
|
||||
pub fn hour12(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Hour12) }
|
||||
pub fn day1(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Day1) }
|
||||
pub fn day3(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Day3) }
|
||||
pub fn week1(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Week1) }
|
||||
pub fn month1(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Month1) }
|
||||
pub fn month3(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Month3) }
|
||||
pub fn month6(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Month6) }
|
||||
pub fn year1(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Year1) }
|
||||
pub fn year10(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Year10) }
|
||||
pub fn halving(&self) -> SeriesEndpointBuilder<T> { _ep(&self.client, &self.name, Index::Halving) }
|
||||
pub fn epoch(&self) -> SeriesEndpointBuilder<T> { _ep(&self.client, &self.name, Index::Epoch) }
|
||||
pub fn minute10(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Minute10) }
|
||||
pub fn minute30(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Minute30) }
|
||||
pub fn hour1(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Hour1) }
|
||||
pub fn hour4(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Hour4) }
|
||||
pub fn hour12(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Hour12) }
|
||||
pub fn day1(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Day1) }
|
||||
pub fn day3(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Day3) }
|
||||
pub fn week1(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Week1) }
|
||||
pub fn month1(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Month1) }
|
||||
pub fn month3(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Month3) }
|
||||
pub fn month6(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Month6) }
|
||||
pub fn year1(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Year1) }
|
||||
pub fn year10(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Year10) }
|
||||
pub fn halving(&self) -> SeriesEndpoint<T> { _ep(&self.client, &self.name, Index::Halving) }
|
||||
pub fn epoch(&self) -> SeriesEndpoint<T> { _ep(&self.client, &self.name, Index::Epoch) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern2<T> { name: Arc<str>, pub by: SeriesPattern2By<T> }
|
||||
@@ -462,11 +462,11 @@ impl<T: DeserializeOwned> SeriesPattern2<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern2<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I2 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern2<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I2.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern2<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I2.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern3By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern3By<T> {
|
||||
pub fn minute10(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Minute10) }
|
||||
pub fn minute10(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Minute10) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern3<T> { name: Arc<str>, pub by: SeriesPattern3By<T> }
|
||||
@@ -476,11 +476,11 @@ impl<T: DeserializeOwned> SeriesPattern3<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern3<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I3 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern3<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I3.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern3<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I3.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern4By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern4By<T> {
|
||||
pub fn minute30(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Minute30) }
|
||||
pub fn minute30(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Minute30) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern4<T> { name: Arc<str>, pub by: SeriesPattern4By<T> }
|
||||
@@ -490,11 +490,11 @@ impl<T: DeserializeOwned> SeriesPattern4<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern4<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I4 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern4<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I4.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern4<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I4.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern5By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern5By<T> {
|
||||
pub fn hour1(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Hour1) }
|
||||
pub fn hour1(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Hour1) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern5<T> { name: Arc<str>, pub by: SeriesPattern5By<T> }
|
||||
@@ -504,11 +504,11 @@ impl<T: DeserializeOwned> SeriesPattern5<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern5<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I5 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern5<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I5.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern5<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I5.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern6By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern6By<T> {
|
||||
pub fn hour4(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Hour4) }
|
||||
pub fn hour4(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Hour4) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern6<T> { name: Arc<str>, pub by: SeriesPattern6By<T> }
|
||||
@@ -518,11 +518,11 @@ impl<T: DeserializeOwned> SeriesPattern6<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern6<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I6 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern6<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I6.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern6<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I6.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern7By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern7By<T> {
|
||||
pub fn hour12(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Hour12) }
|
||||
pub fn hour12(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Hour12) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern7<T> { name: Arc<str>, pub by: SeriesPattern7By<T> }
|
||||
@@ -532,11 +532,11 @@ impl<T: DeserializeOwned> SeriesPattern7<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern7<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I7 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern7<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I7.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern7<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I7.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern8By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern8By<T> {
|
||||
pub fn day1(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Day1) }
|
||||
pub fn day1(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Day1) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern8<T> { name: Arc<str>, pub by: SeriesPattern8By<T> }
|
||||
@@ -546,11 +546,11 @@ impl<T: DeserializeOwned> SeriesPattern8<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern8<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I8 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern8<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I8.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern8<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I8.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern9By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern9By<T> {
|
||||
pub fn day3(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Day3) }
|
||||
pub fn day3(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Day3) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern9<T> { name: Arc<str>, pub by: SeriesPattern9By<T> }
|
||||
@@ -560,11 +560,11 @@ impl<T: DeserializeOwned> SeriesPattern9<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern9<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I9 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern9<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I9.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern9<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I9.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern10By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern10By<T> {
|
||||
pub fn week1(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Week1) }
|
||||
pub fn week1(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Week1) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern10<T> { name: Arc<str>, pub by: SeriesPattern10By<T> }
|
||||
@@ -574,11 +574,11 @@ impl<T: DeserializeOwned> SeriesPattern10<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern10<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I10 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern10<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I10.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern10<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I10.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern11By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern11By<T> {
|
||||
pub fn month1(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Month1) }
|
||||
pub fn month1(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Month1) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern11<T> { name: Arc<str>, pub by: SeriesPattern11By<T> }
|
||||
@@ -588,11 +588,11 @@ impl<T: DeserializeOwned> SeriesPattern11<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern11<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I11 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern11<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I11.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern11<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I11.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern12By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern12By<T> {
|
||||
pub fn month3(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Month3) }
|
||||
pub fn month3(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Month3) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern12<T> { name: Arc<str>, pub by: SeriesPattern12By<T> }
|
||||
@@ -602,11 +602,11 @@ impl<T: DeserializeOwned> SeriesPattern12<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern12<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I12 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern12<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I12.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern12<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I12.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern13By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern13By<T> {
|
||||
pub fn month6(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Month6) }
|
||||
pub fn month6(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Month6) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern13<T> { name: Arc<str>, pub by: SeriesPattern13By<T> }
|
||||
@@ -616,11 +616,11 @@ impl<T: DeserializeOwned> SeriesPattern13<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern13<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I13 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern13<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I13.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern13<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I13.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern14By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern14By<T> {
|
||||
pub fn year1(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Year1) }
|
||||
pub fn year1(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Year1) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern14<T> { name: Arc<str>, pub by: SeriesPattern14By<T> }
|
||||
@@ -630,11 +630,11 @@ impl<T: DeserializeOwned> SeriesPattern14<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern14<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I14 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern14<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I14.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern14<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I14.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern15By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern15By<T> {
|
||||
pub fn year10(&self) -> DateSeriesEndpointBuilder<T> { _dep(&self.client, &self.name, Index::Year10) }
|
||||
pub fn year10(&self) -> DateSeriesEndpoint<T> { _dep(&self.client, &self.name, Index::Year10) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern15<T> { name: Arc<str>, pub by: SeriesPattern15By<T> }
|
||||
@@ -644,11 +644,11 @@ impl<T: DeserializeOwned> SeriesPattern15<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern15<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I15 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern15<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I15.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern15<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I15.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern16By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern16By<T> {
|
||||
pub fn halving(&self) -> SeriesEndpointBuilder<T> { _ep(&self.client, &self.name, Index::Halving) }
|
||||
pub fn halving(&self) -> SeriesEndpoint<T> { _ep(&self.client, &self.name, Index::Halving) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern16<T> { name: Arc<str>, pub by: SeriesPattern16By<T> }
|
||||
@@ -658,11 +658,11 @@ impl<T: DeserializeOwned> SeriesPattern16<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern16<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I16 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern16<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I16.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern16<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I16.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern17By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern17By<T> {
|
||||
pub fn epoch(&self) -> SeriesEndpointBuilder<T> { _ep(&self.client, &self.name, Index::Epoch) }
|
||||
pub fn epoch(&self) -> SeriesEndpoint<T> { _ep(&self.client, &self.name, Index::Epoch) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern17<T> { name: Arc<str>, pub by: SeriesPattern17By<T> }
|
||||
@@ -672,11 +672,11 @@ impl<T: DeserializeOwned> SeriesPattern17<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern17<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I17 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern17<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I17.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern17<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I17.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern18By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern18By<T> {
|
||||
pub fn height(&self) -> SeriesEndpointBuilder<T> { _ep(&self.client, &self.name, Index::Height) }
|
||||
pub fn height(&self) -> SeriesEndpoint<T> { _ep(&self.client, &self.name, Index::Height) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern18<T> { name: Arc<str>, pub by: SeriesPattern18By<T> }
|
||||
@@ -686,11 +686,11 @@ impl<T: DeserializeOwned> SeriesPattern18<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern18<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I18 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern18<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I18.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern18<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I18.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern19By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern19By<T> {
|
||||
pub fn tx_index(&self) -> SeriesEndpointBuilder<T> { _ep(&self.client, &self.name, Index::TxIndex) }
|
||||
pub fn tx_index(&self) -> SeriesEndpoint<T> { _ep(&self.client, &self.name, Index::TxIndex) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern19<T> { name: Arc<str>, pub by: SeriesPattern19By<T> }
|
||||
@@ -700,11 +700,11 @@ impl<T: DeserializeOwned> SeriesPattern19<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern19<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I19 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern19<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I19.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern19<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I19.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern20By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern20By<T> {
|
||||
pub fn txin_index(&self) -> SeriesEndpointBuilder<T> { _ep(&self.client, &self.name, Index::TxInIndex) }
|
||||
pub fn txin_index(&self) -> SeriesEndpoint<T> { _ep(&self.client, &self.name, Index::TxInIndex) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern20<T> { name: Arc<str>, pub by: SeriesPattern20By<T> }
|
||||
@@ -714,11 +714,11 @@ impl<T: DeserializeOwned> SeriesPattern20<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern20<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I20 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern20<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I20.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern20<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I20.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern21By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern21By<T> {
|
||||
pub fn txout_index(&self) -> SeriesEndpointBuilder<T> { _ep(&self.client, &self.name, Index::TxOutIndex) }
|
||||
pub fn txout_index(&self) -> SeriesEndpoint<T> { _ep(&self.client, &self.name, Index::TxOutIndex) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern21<T> { name: Arc<str>, pub by: SeriesPattern21By<T> }
|
||||
@@ -728,11 +728,11 @@ impl<T: DeserializeOwned> SeriesPattern21<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern21<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I21 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern21<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I21.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern21<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I21.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern22By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern22By<T> {
|
||||
pub fn empty_output_index(&self) -> SeriesEndpointBuilder<T> { _ep(&self.client, &self.name, Index::EmptyOutputIndex) }
|
||||
pub fn empty_output_index(&self) -> SeriesEndpoint<T> { _ep(&self.client, &self.name, Index::EmptyOutputIndex) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern22<T> { name: Arc<str>, pub by: SeriesPattern22By<T> }
|
||||
@@ -742,11 +742,11 @@ impl<T: DeserializeOwned> SeriesPattern22<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern22<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I22 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern22<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I22.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern22<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I22.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern23By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern23By<T> {
|
||||
pub fn op_return_index(&self) -> SeriesEndpointBuilder<T> { _ep(&self.client, &self.name, Index::OpReturnIndex) }
|
||||
pub fn op_return_index(&self) -> SeriesEndpoint<T> { _ep(&self.client, &self.name, Index::OpReturnIndex) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern23<T> { name: Arc<str>, pub by: SeriesPattern23By<T> }
|
||||
@@ -756,11 +756,11 @@ impl<T: DeserializeOwned> SeriesPattern23<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern23<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I23 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern23<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I23.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern23<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I23.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern24By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern24By<T> {
|
||||
pub fn p2a_address_index(&self) -> SeriesEndpointBuilder<T> { _ep(&self.client, &self.name, Index::P2AAddressIndex) }
|
||||
pub fn p2a_address_index(&self) -> SeriesEndpoint<T> { _ep(&self.client, &self.name, Index::P2AAddressIndex) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern24<T> { name: Arc<str>, pub by: SeriesPattern24By<T> }
|
||||
@@ -770,11 +770,11 @@ impl<T: DeserializeOwned> SeriesPattern24<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern24<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I24 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern24<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I24.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern24<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I24.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern25By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern25By<T> {
|
||||
pub fn p2ms_output_index(&self) -> SeriesEndpointBuilder<T> { _ep(&self.client, &self.name, Index::P2MSOutputIndex) }
|
||||
pub fn p2ms_output_index(&self) -> SeriesEndpoint<T> { _ep(&self.client, &self.name, Index::P2MSOutputIndex) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern25<T> { name: Arc<str>, pub by: SeriesPattern25By<T> }
|
||||
@@ -784,11 +784,11 @@ impl<T: DeserializeOwned> SeriesPattern25<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern25<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I25 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern25<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I25.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern25<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I25.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern26By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern26By<T> {
|
||||
pub fn p2pk33_address_index(&self) -> SeriesEndpointBuilder<T> { _ep(&self.client, &self.name, Index::P2PK33AddressIndex) }
|
||||
pub fn p2pk33_address_index(&self) -> SeriesEndpoint<T> { _ep(&self.client, &self.name, Index::P2PK33AddressIndex) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern26<T> { name: Arc<str>, pub by: SeriesPattern26By<T> }
|
||||
@@ -798,11 +798,11 @@ impl<T: DeserializeOwned> SeriesPattern26<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern26<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I26 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern26<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I26.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern26<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I26.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern27By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern27By<T> {
|
||||
pub fn p2pk65_address_index(&self) -> SeriesEndpointBuilder<T> { _ep(&self.client, &self.name, Index::P2PK65AddressIndex) }
|
||||
pub fn p2pk65_address_index(&self) -> SeriesEndpoint<T> { _ep(&self.client, &self.name, Index::P2PK65AddressIndex) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern27<T> { name: Arc<str>, pub by: SeriesPattern27By<T> }
|
||||
@@ -812,11 +812,11 @@ impl<T: DeserializeOwned> SeriesPattern27<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern27<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I27 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern27<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I27.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern27<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I27.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern28By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern28By<T> {
|
||||
pub fn p2pkh_address_index(&self) -> SeriesEndpointBuilder<T> { _ep(&self.client, &self.name, Index::P2PKHAddressIndex) }
|
||||
pub fn p2pkh_address_index(&self) -> SeriesEndpoint<T> { _ep(&self.client, &self.name, Index::P2PKHAddressIndex) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern28<T> { name: Arc<str>, pub by: SeriesPattern28By<T> }
|
||||
@@ -826,11 +826,11 @@ impl<T: DeserializeOwned> SeriesPattern28<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern28<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I28 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern28<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I28.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern28<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I28.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern29By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern29By<T> {
|
||||
pub fn p2sh_address_index(&self) -> SeriesEndpointBuilder<T> { _ep(&self.client, &self.name, Index::P2SHAddressIndex) }
|
||||
pub fn p2sh_address_index(&self) -> SeriesEndpoint<T> { _ep(&self.client, &self.name, Index::P2SHAddressIndex) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern29<T> { name: Arc<str>, pub by: SeriesPattern29By<T> }
|
||||
@@ -840,11 +840,11 @@ impl<T: DeserializeOwned> SeriesPattern29<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern29<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I29 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern29<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I29.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern29<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I29.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern30By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern30By<T> {
|
||||
pub fn p2tr_address_index(&self) -> SeriesEndpointBuilder<T> { _ep(&self.client, &self.name, Index::P2TRAddressIndex) }
|
||||
pub fn p2tr_address_index(&self) -> SeriesEndpoint<T> { _ep(&self.client, &self.name, Index::P2TRAddressIndex) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern30<T> { name: Arc<str>, pub by: SeriesPattern30By<T> }
|
||||
@@ -854,11 +854,11 @@ impl<T: DeserializeOwned> SeriesPattern30<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern30<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I30 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern30<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I30.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern30<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I30.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern31By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern31By<T> {
|
||||
pub fn p2wpkh_address_index(&self) -> SeriesEndpointBuilder<T> { _ep(&self.client, &self.name, Index::P2WPKHAddressIndex) }
|
||||
pub fn p2wpkh_address_index(&self) -> SeriesEndpoint<T> { _ep(&self.client, &self.name, Index::P2WPKHAddressIndex) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern31<T> { name: Arc<str>, pub by: SeriesPattern31By<T> }
|
||||
@@ -868,11 +868,11 @@ impl<T: DeserializeOwned> SeriesPattern31<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern31<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I31 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern31<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I31.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern31<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I31.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern32By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern32By<T> {
|
||||
pub fn p2wsh_address_index(&self) -> SeriesEndpointBuilder<T> { _ep(&self.client, &self.name, Index::P2WSHAddressIndex) }
|
||||
pub fn p2wsh_address_index(&self) -> SeriesEndpoint<T> { _ep(&self.client, &self.name, Index::P2WSHAddressIndex) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern32<T> { name: Arc<str>, pub by: SeriesPattern32By<T> }
|
||||
@@ -882,11 +882,11 @@ impl<T: DeserializeOwned> SeriesPattern32<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern32<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I32 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern32<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I32.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern32<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I32.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern33By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern33By<T> {
|
||||
pub fn unknown_output_index(&self) -> SeriesEndpointBuilder<T> { _ep(&self.client, &self.name, Index::UnknownOutputIndex) }
|
||||
pub fn unknown_output_index(&self) -> SeriesEndpoint<T> { _ep(&self.client, &self.name, Index::UnknownOutputIndex) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern33<T> { name: Arc<str>, pub by: SeriesPattern33By<T> }
|
||||
@@ -896,11 +896,11 @@ impl<T: DeserializeOwned> SeriesPattern33<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern33<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I33 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern33<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I33.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern33<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I33.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern34By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern34By<T> {
|
||||
pub fn funded_address_index(&self) -> SeriesEndpointBuilder<T> { _ep(&self.client, &self.name, Index::FundedAddressIndex) }
|
||||
pub fn funded_address_index(&self) -> SeriesEndpoint<T> { _ep(&self.client, &self.name, Index::FundedAddressIndex) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern34<T> { name: Arc<str>, pub by: SeriesPattern34By<T> }
|
||||
@@ -910,11 +910,11 @@ impl<T: DeserializeOwned> SeriesPattern34<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern34<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I34 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern34<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I34.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern34<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I34.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
pub struct SeriesPattern35By<T> { client: Arc<BrkClientBase>, name: Arc<str>, _marker: std::marker::PhantomData<T> }
|
||||
impl<T: DeserializeOwned> SeriesPattern35By<T> {
|
||||
pub fn empty_address_index(&self) -> SeriesEndpointBuilder<T> { _ep(&self.client, &self.name, Index::EmptyAddressIndex) }
|
||||
pub fn empty_address_index(&self) -> SeriesEndpoint<T> { _ep(&self.client, &self.name, Index::EmptyAddressIndex) }
|
||||
}
|
||||
|
||||
pub struct SeriesPattern35<T> { name: Arc<str>, pub by: SeriesPattern35By<T> }
|
||||
@@ -924,7 +924,7 @@ impl<T: DeserializeOwned> SeriesPattern35<T> {
|
||||
}
|
||||
|
||||
impl<T> AnySeriesPattern for SeriesPattern35<T> { fn name(&self) -> &str { &self.name } fn indexes(&self) -> &'static [Index] { _I35 } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern35<T> { fn get(&self, index: Index) -> Option<SeriesEndpointBuilder<T>> { _I35.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
impl<T: DeserializeOwned> SeriesPattern<T> for SeriesPattern35<T> { fn get(&self, index: Index) -> Option<SeriesEndpoint<T>> { _I35.contains(&index).then(|| _ep(&self.by.client, &self.by.name, index)) } }
|
||||
|
||||
// Reusable pattern structs
|
||||
|
||||
@@ -8402,8 +8402,8 @@ impl BrkClient {
|
||||
/// .last(10)
|
||||
/// .json::<f64>()?;
|
||||
/// ```
|
||||
pub fn series_endpoint(&self, series: impl Into<Series>, index: Index) -> SeriesEndpointBuilder<serde_json::Value> {
|
||||
SeriesEndpointBuilder::new(
|
||||
pub fn series_endpoint(&self, series: impl Into<SeriesName>, index: Index) -> SeriesEndpoint<serde_json::Value> {
|
||||
SeriesEndpoint::new(
|
||||
self.base.clone(),
|
||||
Arc::from(series.into().as_str()),
|
||||
index,
|
||||
@@ -8413,11 +8413,11 @@ impl BrkClient {
|
||||
/// Create a dynamic date-based series endpoint builder.
|
||||
///
|
||||
/// Returns `Err` if the index is not date-based.
|
||||
pub fn date_series_endpoint(&self, series: impl Into<Series>, index: Index) -> Result<DateSeriesEndpointBuilder<serde_json::Value>> {
|
||||
pub fn date_series_endpoint(&self, series: impl Into<SeriesName>, index: Index) -> Result<DateSeriesEndpoint<serde_json::Value>> {
|
||||
if !index.is_date_based() {
|
||||
return Err(BrkError { message: format!("{} is not a date-based index", index.name()) });
|
||||
}
|
||||
Ok(DateSeriesEndpointBuilder::new(
|
||||
Ok(DateSeriesEndpoint::new(
|
||||
self.base.clone(),
|
||||
Arc::from(series.into().as_str()),
|
||||
index,
|
||||
@@ -8730,7 +8730,7 @@ impl BrkClient {
|
||||
/// Fuzzy search for series by name. Supports partial matches and typos.
|
||||
///
|
||||
/// Endpoint: `GET /api/series/search`
|
||||
pub fn search_series(&self, q: Series, limit: Option<Limit>) -> Result<Vec<String>> {
|
||||
pub fn search_series(&self, q: SeriesName, limit: Option<Limit>) -> Result<Vec<String>> {
|
||||
let mut query = Vec::new();
|
||||
query.push(format!("q={}", q));
|
||||
if let Some(v) = limit { query.push(format!("limit={}", v)); }
|
||||
@@ -8744,7 +8744,7 @@ impl BrkClient {
|
||||
/// Returns the supported indexes and value type for the specified series.
|
||||
///
|
||||
/// Endpoint: `GET /api/series/{series}`
|
||||
pub fn get_series_info(&self, series: Series) -> Result<SeriesInfo> {
|
||||
pub fn get_series_info(&self, series: SeriesName) -> Result<SeriesInfo> {
|
||||
self.base.get_json(&format!("/api/series/{series}"))
|
||||
}
|
||||
|
||||
@@ -8753,7 +8753,7 @@ impl BrkClient {
|
||||
/// Fetch data for a specific series at the given index. Use query parameters to filter by date range and format (json/csv).
|
||||
///
|
||||
/// Endpoint: `GET /api/series/{series}/{index}`
|
||||
pub fn get_series(&self, series: Series, index: Index, start: Option<RangeIndex>, end: Option<RangeIndex>, limit: Option<Limit>, format: Option<Format>) -> Result<FormatResponse<SeriesData>> {
|
||||
pub fn get_series(&self, series: SeriesName, index: Index, start: Option<RangeIndex>, end: Option<RangeIndex>, limit: Option<Limit>, format: Option<Format>) -> Result<FormatResponse<SeriesData>> {
|
||||
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)); }
|
||||
@@ -8773,7 +8773,7 @@ impl BrkClient {
|
||||
/// Returns just the data array without the SeriesData wrapper. Supports the same range and format parameters as the standard endpoint.
|
||||
///
|
||||
/// Endpoint: `GET /api/series/{series}/{index}/data`
|
||||
pub fn get_series_data(&self, series: Series, index: Index, start: Option<RangeIndex>, end: Option<RangeIndex>, limit: Option<Limit>, format: Option<Format>) -> Result<FormatResponse<Vec<bool>>> {
|
||||
pub fn get_series_data(&self, series: SeriesName, index: Index, start: Option<RangeIndex>, end: Option<RangeIndex>, limit: Option<Limit>, format: Option<Format>) -> Result<FormatResponse<Vec<bool>>> {
|
||||
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)); }
|
||||
@@ -8793,7 +8793,7 @@ impl BrkClient {
|
||||
/// Returns the single most recent value for a series, unwrapped (not inside a SeriesData object).
|
||||
///
|
||||
/// Endpoint: `GET /api/series/{series}/{index}/latest`
|
||||
pub fn get_series_latest(&self, series: Series, index: Index) -> Result<serde_json::Value> {
|
||||
pub fn get_series_latest(&self, series: SeriesName, index: Index) -> Result<serde_json::Value> {
|
||||
self.base.get_json(&format!("/api/series/{series}/{}/latest", index.name()))
|
||||
}
|
||||
|
||||
@@ -8802,7 +8802,7 @@ impl BrkClient {
|
||||
/// Returns the total number of data points for a series at the given index.
|
||||
///
|
||||
/// Endpoint: `GET /api/series/{series}/{index}/len`
|
||||
pub fn get_series_len(&self, series: Series, index: Index) -> Result<f64> {
|
||||
pub fn get_series_len(&self, series: SeriesName, index: Index) -> Result<f64> {
|
||||
self.base.get_json(&format!("/api/series/{series}/{}/len", index.name()))
|
||||
}
|
||||
|
||||
@@ -8811,7 +8811,7 @@ impl BrkClient {
|
||||
/// Returns the current version of a series. Changes when the series data is updated.
|
||||
///
|
||||
/// Endpoint: `GET /api/series/{series}/{index}/version`
|
||||
pub fn get_series_version(&self, series: Series, index: Index) -> Result<Version> {
|
||||
pub fn get_series_version(&self, series: SeriesName, index: Index) -> Result<Version> {
|
||||
self.base.get_json(&format!("/api/series/{series}/{}/version", index.name()))
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ use brk_error::{Error, Result};
|
||||
use brk_traversable::TreeNode;
|
||||
use brk_types::{
|
||||
Date, DetailedSeriesCount, Epoch, Etag, Format, Halving, Height, Index, IndexInfo, LegacyValue,
|
||||
Limit, Series, SeriesData, SeriesInfo, SeriesOutput, SeriesOutputLegacy, SeriesSelection,
|
||||
Limit, SeriesName, SeriesData, SeriesInfo, SeriesOutput, SeriesOutputLegacy, SeriesSelection,
|
||||
Output, OutputLegacy, PaginatedSeries, Pagination, PaginationIndex, RangeIndex, RangeMap,
|
||||
SearchQuery, Timestamp, Version,
|
||||
};
|
||||
@@ -30,7 +30,7 @@ impl Query {
|
||||
self.vecs().matches(&query.q, query.limit)
|
||||
}
|
||||
|
||||
pub fn series_not_found_error(&self, series: &Series) -> Error {
|
||||
pub fn series_not_found_error(&self, series: &SeriesName) -> Error {
|
||||
// Check if series exists but with different indexes
|
||||
if let Some(indexes) = self.vecs().series_to_indexes(series.clone()) {
|
||||
let supported = indexes
|
||||
@@ -108,7 +108,7 @@ impl Query {
|
||||
}
|
||||
|
||||
/// Returns the latest value for a single series as a JSON value.
|
||||
pub fn latest(&self, series: &Series, index: Index) -> Result<serde_json::Value> {
|
||||
pub fn latest(&self, series: &SeriesName, index: Index) -> Result<serde_json::Value> {
|
||||
let vec = self
|
||||
.vecs()
|
||||
.get(series, index)
|
||||
@@ -117,7 +117,7 @@ impl Query {
|
||||
}
|
||||
|
||||
/// Returns the length (total data points) for a single series.
|
||||
pub fn len(&self, series: &Series, index: Index) -> Result<usize> {
|
||||
pub fn len(&self, series: &SeriesName, index: Index) -> Result<usize> {
|
||||
let vec = self
|
||||
.vecs()
|
||||
.get(series, index)
|
||||
@@ -126,7 +126,7 @@ impl Query {
|
||||
}
|
||||
|
||||
/// Returns the version for a single series.
|
||||
pub fn version(&self, series: &Series, index: Index) -> Result<Version> {
|
||||
pub fn version(&self, series: &SeriesName, index: Index) -> Result<Version> {
|
||||
let vec = self
|
||||
.vecs()
|
||||
.get(series, index)
|
||||
@@ -308,7 +308,7 @@ impl Query {
|
||||
self.vecs().index_to_ids(paginated_index)
|
||||
}
|
||||
|
||||
pub fn series_info(&self, series: &Series) -> Option<SeriesInfo> {
|
||||
pub fn series_info(&self, series: &SeriesName) -> Option<SeriesInfo> {
|
||||
let index_to_vec = self.vecs().series_to_index_to_vec.get(series.replace("-", "_").as_str())?;
|
||||
let value_type = index_to_vec.values().next()?.value_type_to_string();
|
||||
let indexes = index_to_vec.keys().copied().collect();
|
||||
@@ -318,7 +318,7 @@ impl Query {
|
||||
})
|
||||
}
|
||||
|
||||
pub fn series_to_indexes(&self, series: Series) -> Option<&Vec<Index>> {
|
||||
pub fn series_to_indexes(&self, series: SeriesName) -> Option<&Vec<Index>> {
|
||||
self.vecs().series_to_indexes(series)
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ use brk_computer::Computer;
|
||||
use brk_indexer::Indexer;
|
||||
use brk_traversable::{Traversable, TreeNode};
|
||||
use brk_types::{
|
||||
Index, IndexInfo, Limit, PaginatedSeries, Pagination, PaginationIndex, Series, SeriesCount,
|
||||
Index, IndexInfo, Limit, PaginatedSeries, Pagination, PaginationIndex, SeriesName, SeriesCount,
|
||||
};
|
||||
use derive_more::{Deref, DerefMut};
|
||||
use quickmatch::{QuickMatch, QuickMatchConfig};
|
||||
@@ -182,7 +182,7 @@ impl<'a> Vecs<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn series_to_indexes(&self, series: Series) -> Option<&Vec<Index>> {
|
||||
pub fn series_to_indexes(&self, series: SeriesName) -> Option<&Vec<Index>> {
|
||||
self.series_to_indexes
|
||||
.get(series.replace("-", "_").as_str())
|
||||
}
|
||||
@@ -204,7 +204,7 @@ impl<'a> Vecs<'a> {
|
||||
self.catalog.as_ref().expect("catalog not initialized")
|
||||
}
|
||||
|
||||
pub fn matches(&self, series: &Series, limit: Limit) -> Vec<&'_ str> {
|
||||
pub fn matches(&self, series: &SeriesName, limit: Limit) -> Vec<&'_ str> {
|
||||
if limit.is_zero() {
|
||||
return Vec::new();
|
||||
}
|
||||
@@ -215,7 +215,7 @@ impl<'a> Vecs<'a> {
|
||||
}
|
||||
|
||||
/// Look up a vec by series name and index
|
||||
pub fn get(&self, series: &Series, index: Index) -> Option<&'a dyn AnyExportableVec> {
|
||||
pub fn get(&self, series: &SeriesName, index: Index) -> Option<&'a dyn AnyExportableVec> {
|
||||
let series_name = series.replace("-", "_");
|
||||
self.series_to_index_to_vec
|
||||
.get(series_name.as_str())
|
||||
|
||||
@@ -10,7 +10,7 @@ use axum::{
|
||||
use brk_traversable::TreeNode;
|
||||
use brk_types::{
|
||||
CostBasisCohortParam, CostBasisFormatted, CostBasisParams, CostBasisQuery, DataRangeFormat,
|
||||
Date, DetailedSeriesCount, Index, IndexInfo, PaginatedSeries, Pagination, SearchQuery, Series,
|
||||
Date, DetailedSeriesCount, Index, IndexInfo, PaginatedSeries, Pagination, SearchQuery, SeriesName,
|
||||
SeriesData, SeriesInfo, SeriesList, SeriesSelection, SeriesSelectionLegacy,
|
||||
};
|
||||
use schemars::JsonSchema;
|
||||
@@ -24,13 +24,13 @@ use super::series::legacy;
|
||||
/// Legacy path parameter for `/api/metric/{metric}`
|
||||
#[derive(Deserialize, JsonSchema)]
|
||||
struct LegacySeriesParam {
|
||||
metric: Series,
|
||||
metric: SeriesName,
|
||||
}
|
||||
|
||||
/// Legacy path parameters for `/api/metric/{metric}/{index}`
|
||||
#[derive(Clone, Debug, Deserialize, Serialize, JsonSchema)]
|
||||
struct LegacySeriesWithIndex {
|
||||
metric: Series,
|
||||
metric: SeriesName,
|
||||
index: Index,
|
||||
}
|
||||
|
||||
|
||||
@@ -10,8 +10,8 @@ use axum::{
|
||||
use brk_traversable::TreeNode;
|
||||
use brk_types::{
|
||||
CostBasisCohortParam, CostBasisFormatted, CostBasisParams, CostBasisQuery, DataRangeFormat,
|
||||
Date, IndexInfo, PaginatedSeries, Pagination, SearchQuery, SeriesCount, SeriesData,
|
||||
SeriesInfo, SeriesParam, SeriesSelection, SeriesWithIndex,
|
||||
Date, IndexInfo, PaginatedSeries, Pagination, SearchQuery, SeriesCount, SeriesData, SeriesInfo,
|
||||
SeriesNameWithIndex, SeriesParam, SeriesSelection,
|
||||
};
|
||||
|
||||
use crate::{CacheStrategy, extended::TransformResponseExtended};
|
||||
@@ -177,7 +177,7 @@ impl ApiSeriesRoutes for ApiRouter<AppState> {
|
||||
headers: HeaderMap,
|
||||
addr: Extension<SocketAddr>,
|
||||
state: State<AppState>,
|
||||
Path(path): Path<SeriesWithIndex>,
|
||||
Path(path): Path<SeriesNameWithIndex>,
|
||||
Query(range): Query<DataRangeFormat>|
|
||||
-> Response {
|
||||
data::handler(
|
||||
@@ -211,7 +211,7 @@ impl ApiSeriesRoutes for ApiRouter<AppState> {
|
||||
headers: HeaderMap,
|
||||
addr: Extension<SocketAddr>,
|
||||
state: State<AppState>,
|
||||
Path(path): Path<SeriesWithIndex>,
|
||||
Path(path): Path<SeriesNameWithIndex>,
|
||||
Query(range): Query<DataRangeFormat>|
|
||||
-> Response {
|
||||
data::raw_handler(
|
||||
@@ -244,7 +244,7 @@ impl ApiSeriesRoutes for ApiRouter<AppState> {
|
||||
async |uri: Uri,
|
||||
headers: HeaderMap,
|
||||
State(state): State<AppState>,
|
||||
Path(path): Path<SeriesWithIndex>| {
|
||||
Path(path): Path<SeriesNameWithIndex>| {
|
||||
state
|
||||
.cached_json(&headers, CacheStrategy::Height, &uri, move |q| {
|
||||
q.latest(&path.series, path.index)
|
||||
@@ -268,7 +268,7 @@ impl ApiSeriesRoutes for ApiRouter<AppState> {
|
||||
async |uri: Uri,
|
||||
headers: HeaderMap,
|
||||
State(state): State<AppState>,
|
||||
Path(path): Path<SeriesWithIndex>| {
|
||||
Path(path): Path<SeriesNameWithIndex>| {
|
||||
state
|
||||
.cached_json(&headers, CacheStrategy::Height, &uri, move |q| {
|
||||
q.len(&path.series, path.index)
|
||||
@@ -290,7 +290,7 @@ impl ApiSeriesRoutes for ApiRouter<AppState> {
|
||||
async |uri: Uri,
|
||||
headers: HeaderMap,
|
||||
State(state): State<AppState>,
|
||||
Path(path): Path<SeriesWithIndex>| {
|
||||
Path(path): Path<SeriesNameWithIndex>| {
|
||||
state
|
||||
.cached_json(&headers, CacheStrategy::Height, &uri, move |q| {
|
||||
q.version(&path.series, path.index)
|
||||
|
||||
@@ -24,13 +24,8 @@ mod blk_metadata;
|
||||
mod blk_position;
|
||||
mod block;
|
||||
mod block_count_param;
|
||||
mod block_fees_entry;
|
||||
mod block_fee_rates_entry;
|
||||
mod blockhash;
|
||||
mod blockhash_param;
|
||||
mod blockhash_prefix;
|
||||
mod blockhash_start_index;
|
||||
mod blockhash_tx_index;
|
||||
mod block_fees_entry;
|
||||
mod block_info;
|
||||
mod block_rewards_entry;
|
||||
mod block_size_entry;
|
||||
@@ -38,6 +33,11 @@ mod block_sizes_weights;
|
||||
mod block_status;
|
||||
mod block_timestamp;
|
||||
mod block_weight_entry;
|
||||
mod blockhash;
|
||||
mod blockhash_param;
|
||||
mod blockhash_prefix;
|
||||
mod blockhash_start_index;
|
||||
mod blockhash_tx_index;
|
||||
mod bytes;
|
||||
mod cents;
|
||||
mod cents_compact;
|
||||
@@ -82,24 +82,13 @@ mod hour1;
|
||||
mod hour12;
|
||||
mod hour4;
|
||||
mod index;
|
||||
mod indexes;
|
||||
mod index_info;
|
||||
mod indexes;
|
||||
mod limit;
|
||||
mod limit_param;
|
||||
mod mempool_block;
|
||||
mod mempool_entry_info;
|
||||
mod mempool_info;
|
||||
mod series;
|
||||
mod series_count;
|
||||
mod series_data;
|
||||
mod series_info;
|
||||
mod series_output;
|
||||
mod series_param;
|
||||
mod series_list;
|
||||
mod series_selection;
|
||||
mod series_selection_legacy;
|
||||
mod series_paginated;
|
||||
mod series_with_index;
|
||||
mod minute10;
|
||||
mod minute30;
|
||||
mod month1;
|
||||
@@ -135,21 +124,32 @@ mod percentile;
|
||||
mod pool;
|
||||
mod pool_detail;
|
||||
mod pool_info;
|
||||
mod pools;
|
||||
mod pool_slug;
|
||||
mod pool_slug_param;
|
||||
mod pools_summary;
|
||||
mod pool_stats;
|
||||
mod pools;
|
||||
mod pools_summary;
|
||||
mod port;
|
||||
mod range_map;
|
||||
mod range_index;
|
||||
mod range_map;
|
||||
mod raw_locktime;
|
||||
mod recommended_fees;
|
||||
mod reward_stats;
|
||||
mod sats;
|
||||
mod sats_signed;
|
||||
mod sats_fract;
|
||||
mod sats_signed;
|
||||
mod search_query;
|
||||
mod series_count;
|
||||
mod series_data;
|
||||
mod series_info;
|
||||
mod series_list;
|
||||
mod series_name;
|
||||
mod series_name_with_index;
|
||||
mod series_output;
|
||||
mod series_paginated;
|
||||
mod series_param;
|
||||
mod series_selection;
|
||||
mod series_selection_legacy;
|
||||
mod stored_bool;
|
||||
mod stored_f32;
|
||||
mod stored_f64;
|
||||
@@ -170,19 +170,19 @@ mod timestamp;
|
||||
mod timestamp_param;
|
||||
mod tree_node;
|
||||
mod tx;
|
||||
mod tx_index;
|
||||
mod tx_status;
|
||||
mod tx_version;
|
||||
mod tx_with_hex;
|
||||
mod txid;
|
||||
mod txid_param;
|
||||
mod txid_prefix;
|
||||
mod txid_vout;
|
||||
mod txin;
|
||||
mod tx_index;
|
||||
mod txin_index;
|
||||
mod txout;
|
||||
mod txout_index;
|
||||
mod txout_spend;
|
||||
mod tx_status;
|
||||
mod tx_version;
|
||||
mod tx_with_hex;
|
||||
mod type_index;
|
||||
mod unit;
|
||||
mod unknown_output_index;
|
||||
@@ -219,13 +219,8 @@ pub use blk_metadata::*;
|
||||
pub use blk_position::*;
|
||||
pub use block::*;
|
||||
pub use block_count_param::*;
|
||||
pub use block_fees_entry::*;
|
||||
pub use block_fee_rates_entry::*;
|
||||
pub use blockhash::*;
|
||||
pub use blockhash_param::*;
|
||||
pub use blockhash_prefix::*;
|
||||
pub use blockhash_start_index::*;
|
||||
pub use blockhash_tx_index::*;
|
||||
pub use block_fees_entry::*;
|
||||
pub use block_info::*;
|
||||
pub use block_rewards_entry::*;
|
||||
pub use block_size_entry::*;
|
||||
@@ -233,6 +228,11 @@ pub use block_sizes_weights::*;
|
||||
pub use block_status::*;
|
||||
pub use block_timestamp::*;
|
||||
pub use block_weight_entry::*;
|
||||
pub use blockhash::*;
|
||||
pub use blockhash_param::*;
|
||||
pub use blockhash_prefix::*;
|
||||
pub use blockhash_start_index::*;
|
||||
pub use blockhash_tx_index::*;
|
||||
pub use bytes::*;
|
||||
pub use cents::*;
|
||||
pub use cents_compact::*;
|
||||
@@ -277,24 +277,13 @@ pub use hour1::*;
|
||||
pub use hour4::*;
|
||||
pub use hour12::*;
|
||||
pub use index::*;
|
||||
pub use indexes::*;
|
||||
pub use index_info::*;
|
||||
pub use indexes::*;
|
||||
pub use limit::*;
|
||||
pub use limit_param::*;
|
||||
pub use mempool_block::*;
|
||||
pub use mempool_entry_info::*;
|
||||
pub use mempool_info::*;
|
||||
pub use series::*;
|
||||
pub use series_count::*;
|
||||
pub use series_data::*;
|
||||
pub use series_info::*;
|
||||
pub use series_output::*;
|
||||
pub use series_param::*;
|
||||
pub use series_list::*;
|
||||
pub use series_selection::*;
|
||||
pub use series_selection_legacy::*;
|
||||
pub use series_paginated::*;
|
||||
pub use series_with_index::*;
|
||||
pub use minute10::*;
|
||||
pub use minute30::*;
|
||||
pub use month1::*;
|
||||
@@ -330,21 +319,32 @@ pub use percentile::*;
|
||||
pub use pool::*;
|
||||
pub use pool_detail::*;
|
||||
pub use pool_info::*;
|
||||
pub use pools::*;
|
||||
pub use pool_slug::*;
|
||||
pub use pool_slug_param::*;
|
||||
pub use pools_summary::*;
|
||||
pub use pool_stats::*;
|
||||
pub use pools::*;
|
||||
pub use pools_summary::*;
|
||||
pub use port::*;
|
||||
pub use range_map::*;
|
||||
pub use range_index::*;
|
||||
pub use range_map::*;
|
||||
pub use raw_locktime::*;
|
||||
pub use recommended_fees::*;
|
||||
pub use reward_stats::*;
|
||||
pub use sats::*;
|
||||
pub use sats_signed::*;
|
||||
pub use sats_fract::*;
|
||||
pub use sats_signed::*;
|
||||
pub use search_query::*;
|
||||
pub use series_count::*;
|
||||
pub use series_data::*;
|
||||
pub use series_info::*;
|
||||
pub use series_list::*;
|
||||
pub use series_name::*;
|
||||
pub use series_name_with_index::*;
|
||||
pub use series_output::*;
|
||||
pub use series_paginated::*;
|
||||
pub use series_param::*;
|
||||
pub use series_selection::*;
|
||||
pub use series_selection_legacy::*;
|
||||
pub use stored_bool::*;
|
||||
pub use stored_f32::*;
|
||||
pub use stored_f64::*;
|
||||
@@ -365,19 +365,19 @@ pub use timestamp::*;
|
||||
pub use timestamp_param::*;
|
||||
pub use tree_node::*;
|
||||
pub use tx::*;
|
||||
pub use tx_index::*;
|
||||
pub use tx_status::*;
|
||||
pub use tx_version::*;
|
||||
pub use tx_with_hex::*;
|
||||
pub use txid::*;
|
||||
pub use txid_param::*;
|
||||
pub use txid_prefix::*;
|
||||
pub use txid_vout::*;
|
||||
pub use txin::*;
|
||||
pub use tx_index::*;
|
||||
pub use txin_index::*;
|
||||
pub use txout::*;
|
||||
pub use txout_index::*;
|
||||
pub use txout_spend::*;
|
||||
pub use tx_status::*;
|
||||
pub use tx_version::*;
|
||||
pub use tx_with_hex::*;
|
||||
pub use type_index::*;
|
||||
pub use unit::*;
|
||||
pub use unknown_output_index::*;
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
use schemars::JsonSchema;
|
||||
use serde::Deserialize;
|
||||
|
||||
use crate::{Limit, Series};
|
||||
use crate::{Limit, SeriesName};
|
||||
|
||||
#[derive(Debug, Deserialize, JsonSchema)]
|
||||
pub struct SearchQuery {
|
||||
/// Search query string
|
||||
pub q: Series,
|
||||
pub q: SeriesName,
|
||||
/// Maximum number of results
|
||||
#[serde(default)]
|
||||
pub limit: Limit,
|
||||
|
||||
@@ -4,7 +4,7 @@ use derive_more::Deref;
|
||||
use schemars::JsonSchema;
|
||||
use serde::Deserialize;
|
||||
|
||||
use super::Series;
|
||||
use super::SeriesName;
|
||||
|
||||
/// Comma-separated list of series names
|
||||
#[derive(Debug, Deref, JsonSchema)]
|
||||
@@ -15,14 +15,14 @@ use super::Series;
|
||||
example = &"price_close,market_cap",
|
||||
example = &"realized_price,market_cap,mvrv"
|
||||
)]
|
||||
pub struct SeriesList(Vec<Series>);
|
||||
pub struct SeriesList(Vec<SeriesName>);
|
||||
|
||||
const MAX_VECS: usize = 32;
|
||||
const MAX_STRING_SIZE: usize = 64 * MAX_VECS;
|
||||
|
||||
impl From<Series> for SeriesList {
|
||||
impl From<SeriesName> for SeriesList {
|
||||
#[inline]
|
||||
fn from(series: Series) -> Self {
|
||||
fn from(series: SeriesName) -> Self {
|
||||
Self(vec![series])
|
||||
}
|
||||
}
|
||||
@@ -30,7 +30,7 @@ impl From<Series> for SeriesList {
|
||||
impl From<String> for SeriesList {
|
||||
#[inline]
|
||||
fn from(value: String) -> Self {
|
||||
Self::from(Series::from(value.replace("-", "_").to_lowercase()))
|
||||
Self::from(SeriesName::from(value.replace("-", "_").to_lowercase()))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ impl<'a> From<Vec<&'a str>> for SeriesList {
|
||||
Self(
|
||||
value
|
||||
.iter()
|
||||
.map(|s| Series::from(s.replace("-", "_").to_lowercase()))
|
||||
.map(|s| SeriesName::from(s.replace("-", "_").to_lowercase()))
|
||||
.collect::<Vec<_>>(),
|
||||
)
|
||||
}
|
||||
@@ -58,7 +58,7 @@ impl<'de> Deserialize<'de> for SeriesList {
|
||||
Ok(Self(
|
||||
sanitize(str.split(",").map(|s| s.to_string()))
|
||||
.into_iter()
|
||||
.map(Series::from)
|
||||
.map(SeriesName::from)
|
||||
.collect(),
|
||||
))
|
||||
} else {
|
||||
@@ -69,7 +69,7 @@ impl<'de> Deserialize<'de> for SeriesList {
|
||||
Ok(Self(
|
||||
sanitize(vec.iter().filter_map(|s| s.as_str().map(String::from)))
|
||||
.into_iter()
|
||||
.map(Series::from)
|
||||
.map(SeriesName::from)
|
||||
.collect(),
|
||||
))
|
||||
} else {
|
||||
|
||||
@@ -13,23 +13,23 @@ use serde::{Deserialize, Serialize};
|
||||
example = &"market_cap",
|
||||
example = &"realized_price"
|
||||
)]
|
||||
pub struct Series(String);
|
||||
pub struct SeriesName(String);
|
||||
|
||||
impl From<String> for Series {
|
||||
impl From<String> for SeriesName {
|
||||
#[inline]
|
||||
fn from(series: String) -> Self {
|
||||
Self(series)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<&str> for Series {
|
||||
impl From<&str> for SeriesName {
|
||||
#[inline]
|
||||
fn from(series: &str) -> Self {
|
||||
Self(series.to_owned())
|
||||
}
|
||||
}
|
||||
|
||||
impl Display for Series {
|
||||
impl Display for SeriesName {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
write!(f, "{}", self.0)
|
||||
}
|
||||
@@ -1,19 +1,19 @@
|
||||
use schemars::JsonSchema;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{Index, Series};
|
||||
use crate::{Index, SeriesName};
|
||||
|
||||
#[derive(Clone, Debug, Deserialize, Serialize, JsonSchema)]
|
||||
pub struct SeriesWithIndex {
|
||||
pub struct SeriesNameWithIndex {
|
||||
/// Series name
|
||||
pub series: Series,
|
||||
pub series: SeriesName,
|
||||
|
||||
/// Aggregation index
|
||||
pub index: Index,
|
||||
}
|
||||
|
||||
impl SeriesWithIndex {
|
||||
pub fn new(series: impl Into<Series>, index: Index) -> Self {
|
||||
impl SeriesNameWithIndex {
|
||||
pub fn new(series: impl Into<SeriesName>, index: Index) -> Self {
|
||||
Self {
|
||||
series: series.into(),
|
||||
index,
|
||||
@@ -21,13 +21,13 @@ impl SeriesWithIndex {
|
||||
}
|
||||
}
|
||||
|
||||
impl From<(Series, Index)> for SeriesWithIndex {
|
||||
fn from((series, index): (Series, Index)) -> Self {
|
||||
impl From<(SeriesName, Index)> for SeriesNameWithIndex {
|
||||
fn from((series, index): (SeriesName, Index)) -> Self {
|
||||
Self { series, index }
|
||||
}
|
||||
}
|
||||
|
||||
impl From<(&str, Index)> for SeriesWithIndex {
|
||||
impl From<(&str, Index)> for SeriesNameWithIndex {
|
||||
fn from((series, index): (&str, Index)) -> Self {
|
||||
Self {
|
||||
series: series.into(),
|
||||
@@ -1,9 +1,9 @@
|
||||
use schemars::JsonSchema;
|
||||
use serde::Deserialize;
|
||||
|
||||
use crate::Series;
|
||||
use crate::SeriesName;
|
||||
|
||||
#[derive(Deserialize, JsonSchema)]
|
||||
pub struct SeriesParam {
|
||||
pub series: Series,
|
||||
pub series: SeriesName,
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ use derive_more::Deref;
|
||||
use schemars::JsonSchema;
|
||||
use serde::Deserialize;
|
||||
|
||||
use crate::{DataRangeFormat, Index, Series, SeriesList};
|
||||
use crate::{DataRangeFormat, Index, SeriesName, SeriesList};
|
||||
|
||||
/// Selection of series to query
|
||||
#[derive(Debug, Deref, Deserialize, JsonSchema)]
|
||||
@@ -20,9 +20,9 @@ pub struct SeriesSelection {
|
||||
pub range: DataRangeFormat,
|
||||
}
|
||||
|
||||
impl From<(Index, Series, DataRangeFormat)> for SeriesSelection {
|
||||
impl From<(Index, SeriesName, DataRangeFormat)> for SeriesSelection {
|
||||
#[inline]
|
||||
fn from((index, series, range): (Index, Series, DataRangeFormat)) -> Self {
|
||||
fn from((index, series, range): (Index, SeriesName, DataRangeFormat)) -> Self {
|
||||
Self {
|
||||
index,
|
||||
series: SeriesList::from(series),
|
||||
|
||||
Reference in New Issue
Block a user