1use alloc::string::String;
2use alloc::vec::Vec;
3
4use bitcoin::bip158;
5use corepc_types::bitcoin;
6use corepc_types::v19::GetBlockFilterError;
7use serde::{Deserialize, Serialize};
8
9#[derive(Debug, Clone, PartialEq, Deserialize)]
11pub(crate) struct GetBlockFilterResponse {
12 pub filter: String,
14 pub header: bip158::FilterHeader,
16}
17
18impl GetBlockFilterResponse {
19 pub fn into_model(self) -> Result<GetBlockFilter, GetBlockFilterError> {
21 use bitcoin::hex::FromHex;
22 let GetBlockFilterResponse { filter, header } = self;
23 let data = <Vec<u8> as FromHex>::from_hex(&filter).map_err(GetBlockFilterError::Filter)?;
24 let filter = bip158::BlockFilter::new(&data);
25
26 Ok(GetBlockFilter { filter, header })
27 }
28}
29
30#[derive(Debug, Clone, PartialEq)]
32pub struct GetBlockFilter {
33 pub filter: bip158::BlockFilter,
35 pub header: bip158::FilterHeader,
37}
38
39#[derive(Debug, Clone, Serialize, Default)]
41pub struct ImportDescriptorsRequest {
42 pub desc: String,
44 #[serde(skip_serializing_if = "Option::is_none")]
46 pub active: Option<bool>,
47 #[serde(skip_serializing_if = "Option::is_none")]
49 pub range: Option<(usize, usize)>,
50 #[serde(skip_serializing_if = "Option::is_none")]
52 pub next_index: Option<usize>,
53 pub timestamp: u64,
56 #[serde(skip_serializing_if = "Option::is_none")]
58 pub internal: Option<bool>,
59 #[serde(skip_serializing_if = "Option::is_none")]
61 pub label: Option<String>,
62}
63
64#[derive(Debug, Clone, Deserialize)]
66pub struct ImportDescriptorsResponse {
67 pub success: bool,
69 #[serde(default)]
71 pub warnings: Option<Vec<String>>,
72 pub error: Option<ImportDescriptorsError>,
74}
75
76#[derive(Debug, Clone, Deserialize)]
78pub struct ImportDescriptorsError {
79 pub code: i32,
81 pub message: String,
83}