use alloc::string::String;
use alloc::vec::Vec;
use bitcoin::bip158;
use corepc_types::bitcoin;
use corepc_types::v19::GetBlockFilterError;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Deserialize)]
pub(crate) struct GetBlockFilterResponse {
pub filter: String,
pub header: bip158::FilterHeader,
}
impl GetBlockFilterResponse {
pub fn into_model(self) -> Result<GetBlockFilter, GetBlockFilterError> {
use bitcoin::hex::FromHex;
let GetBlockFilterResponse { filter, header } = self;
let data = <Vec<u8> as FromHex>::from_hex(&filter).map_err(GetBlockFilterError::Filter)?;
let filter = bip158::BlockFilter::new(&data);
Ok(GetBlockFilter { filter, header })
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct GetBlockFilter {
pub filter: bip158::BlockFilter,
pub header: bip158::FilterHeader,
}
#[derive(Debug, Clone, Serialize, Default)]
pub struct ImportDescriptorsRequest {
pub desc: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub active: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub range: Option<(usize, usize)>,
#[serde(skip_serializing_if = "Option::is_none")]
pub next_index: Option<usize>,
pub timestamp: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub internal: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub label: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ImportDescriptorsResponse {
pub success: bool,
#[serde(default)]
pub warnings: Option<Vec<String>>,
pub error: Option<ImportDescriptorsError>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ImportDescriptorsError {
pub code: i32,
pub message: String,
}