use std::borrow::Cow;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use crate::{Pool, PoolSlug, Sats};
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct PoolDetail {
pub pool: PoolDetailInfo,
#[serde(rename = "blockCount")]
pub block_count: PoolBlockCounts,
#[serde(rename = "blockShare")]
pub block_share: PoolBlockShares,
#[serde(rename = "estimatedHashrate")]
pub estimated_hashrate: u128,
#[serde(rename = "reportedHashrate")]
pub reported_hashrate: Option<u128>,
#[serde(rename = "totalReward")]
pub total_reward: Option<Sats>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct PoolDetailInfo {
pub id: u8,
pub name: Cow<'static, str>,
pub link: Cow<'static, str>,
pub addresses: Vec<Cow<'static, str>>,
pub regexes: Vec<Cow<'static, str>>,
pub slug: PoolSlug,
pub unique_id: u8,
}
impl From<&'static Pool> for PoolDetailInfo {
fn from(pool: &'static Pool) -> Self {
Self {
id: pool.mempool_id(),
name: Cow::Borrowed(pool.name),
link: Cow::Borrowed(pool.link),
addresses: pool.addrs.iter().map(|&s| Cow::Borrowed(s)).collect(),
regexes: pool.tags.iter().map(|&s| Cow::Borrowed(s)).collect(),
slug: pool.slug(),
unique_id: pool.mempool_unique_id(),
}
}
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct PoolBlockCounts {
pub all: u64,
#[serde(rename = "24h")]
pub day: u64,
#[serde(rename = "1w")]
pub week: u64,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct PoolBlockShares {
pub all: f64,
#[serde(rename = "24h")]
pub day: f64,
#[serde(rename = "1w")]
pub week: f64,
}