use crate::bitcoin::adapters::BitcoinAdapter;
use crate::AnyaResult;
use std::sync::{Arc, Mutex};
#[derive(Clone, Debug)]
pub struct BitcoinManagerConfig {
pub enabled: bool,
pub network: String,
pub rpc_url: Option<String>,
pub auth: Option<(String, String)>,
}
impl Default for BitcoinManagerConfig {
fn default() -> Self {
Self {
enabled: true,
network: "testnet".to_string(),
rpc_url: None,
auth: None,
}
}
}
pub struct BitcoinManager {
config: BitcoinManagerConfig,
adapter: Arc<BitcoinAdapter>,
metrics: Arc<Mutex<crate::core::PrometheusMetrics>>,
}
impl BitcoinManager {
pub fn new(
config: BitcoinManagerConfig,
adapter: Arc<BitcoinAdapter>,
metrics: Arc<Mutex<crate::core::PrometheusMetrics>>,
) -> Self {
Self {
config,
adapter,
metrics,
}
}
pub fn is_enabled(&self) -> bool {
self.config.enabled
}
pub fn get_network(&self) -> &str {
&self.config.network
}
pub fn get_adapter(&self) -> Arc<BitcoinAdapter> {
self.adapter.clone()
}
pub async fn get_block_height(&self) -> AnyaResult<u32> {
{
let mut metrics = self.metrics.lock().unwrap();
metrics.increment_counter("bitcoin_api_calls", "method", "get_block_height");
}
Ok(32) }
}