mirror of
https://github.com/bitcoinresearchkit/brk.git
synced 2026-07-07 00:58:14 -07:00
global: added support for oracle histograms
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
use brk_types::{Date, Height};
|
||||
use schemars::JsonSchema;
|
||||
use serde::Deserialize;
|
||||
|
||||
use crate::Error;
|
||||
|
||||
/// Path parameter accepting either a block height (`840000`) or a calendar date
|
||||
/// (`YYYY-MM-DD`). The handler resolves it and dispatches to the per-height or
|
||||
/// per-day variant, choosing the matching cache strategy.
|
||||
#[derive(Deserialize, JsonSchema)]
|
||||
pub struct HeightOrDateParam {
|
||||
#[schemars(example = &"840000")]
|
||||
pub point: String,
|
||||
}
|
||||
|
||||
/// A resolved [`HeightOrDateParam`]: a confirmed block height or a calendar day.
|
||||
pub enum HeightOrDate {
|
||||
Height(Height),
|
||||
Date(Date),
|
||||
}
|
||||
|
||||
impl HeightOrDateParam {
|
||||
/// Parses the raw `point`: a `YYYY-MM-DD` string is a [`Date`], an all-digit
|
||||
/// string is a [`Height`], anything else is a 400. Dates are tried first
|
||||
/// because their dashes keep them from parsing as a height.
|
||||
pub fn resolve(&self) -> Result<HeightOrDate, Error> {
|
||||
if let Ok(date) = self.point.parse::<Date>() {
|
||||
Ok(HeightOrDate::Date(date))
|
||||
} else if let Ok(height) = self.point.parse::<usize>() {
|
||||
Ok(HeightOrDate::Height(Height::from(height)))
|
||||
} else {
|
||||
Err(Error::bad_request(format!(
|
||||
"expected a block height or YYYY-MM-DD date, got `{}`",
|
||||
self.point
|
||||
)))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ mod blockhash_param;
|
||||
mod blockhash_start_index;
|
||||
mod blockhash_tx_index;
|
||||
mod empty;
|
||||
mod height_or_date_param;
|
||||
mod height_param;
|
||||
mod next_block_hash_param;
|
||||
mod pool_slug_param;
|
||||
@@ -25,6 +26,7 @@ pub use blockhash_param::*;
|
||||
pub use blockhash_start_index::*;
|
||||
pub use blockhash_tx_index::*;
|
||||
pub use empty::*;
|
||||
pub use height_or_date_param::*;
|
||||
pub use height_param::*;
|
||||
pub use next_block_hash_param::*;
|
||||
pub use pool_slug_param::*;
|
||||
|
||||
Reference in New Issue
Block a user