1use serde::{Deserialize, Serialize};
3use std::collections::BTreeMap;
4
5use super::{JadeError, TransportError};
6
7#[derive(Debug, Serialize, Deserialize)]
8pub struct Request<'a, T: Serialize> {
9 pub id: &'a str,
10 pub method: &'a str,
11 pub params: Option<T>,
12}
13
14#[derive(Debug, Serialize, Deserialize)]
15pub struct EmptyRequest;
16
17#[derive(Debug, Serialize, Deserialize)]
18pub struct Response<T> {
19 pub id: String,
20 pub seqlen: Option<u32>,
21 pub seqnum: Option<u32>,
22 pub result: Option<T>,
23 pub error: Option<Error>,
24}
25
26impl<T> Response<T> {
27 pub fn into_result(self) -> Result<T, JadeError> {
28 if let Some(e) = self.error {
29 return Err(JadeError::Rpc(e));
30 }
31
32 self.result
33 .ok_or_else(|| TransportError::NoErrorOrResult.into())
34 }
35}
36
37#[derive(Debug, PartialEq, Eq)]
38#[repr(i32)]
39pub enum ErrorCode {
40 InvalidRequest = -32600,
41 UnknownMethod = -32601,
42 BadParameters = -32602,
43 InternalError = -32603,
44 UserCancelled = -32000,
45 ProtocolError = -32001,
46 HwLocked = -32002,
47 NetworkMismatch = -32003,
48}
49
50#[derive(Debug, Serialize, Deserialize)]
51pub struct Error {
52 pub code: i32,
53 pub message: Option<String>,
54 pub data: Option<Vec<u8>>,
55}
56
57#[derive(Debug, Serialize, Deserialize)]
58pub struct GetXpubParams<'a> {
59 pub network: &'a str,
60 pub path: Vec<u32>,
61}
62
63#[derive(Debug, Serialize, Deserialize)]
64pub struct AuthUserParams<'a> {
65 pub network: &'a str,
66 pub epoch: u64,
67}
68
69#[derive(Debug, Serialize, Deserialize)]
70#[serde(untagged)]
71pub enum AuthUserResponse {
72 Authenticated(bool),
73 PinServerRequired { http_request: PinServerRequest },
74}
75
76#[derive(Debug, Serialize, Deserialize)]
77pub struct PinServerRequest {
78 pub params: PinServerRequestParams,
79 #[serde(alias = "on-reply")]
80 pub onreply: String,
81}
82
83#[derive(Debug, Serialize, Deserialize)]
84pub struct PinServerRequestParams {
85 pub urls: PinServerUrls,
86 pub method: String,
87 pub accept: String,
88 pub data: PinParams,
89}
90
91#[derive(Debug, Serialize, Deserialize)]
92#[serde(untagged)]
93pub enum PinServerUrls {
94 Array(Vec<String>),
95 Object { url: String, onion: String },
96}
97
98#[derive(Debug, Serialize, Deserialize)]
99pub struct PinParams {
100 pub data: String,
101}
102
103#[derive(Debug, Serialize, Deserialize)]
104pub struct GetInfoResponse {
105 #[serde(alias = "JADE_VERSION")]
106 pub jade_version: String,
107 #[serde(alias = "JADE_STATE")]
108 pub jade_state: JadeState,
109 #[serde(alias = "JADE_NETWORKS")]
110 pub jade_networks: JadeNetworks,
111}
112
113#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
114pub enum JadeState {
115 #[serde(alias = "UNINIT")]
116 Uninit,
117 #[serde(alias = "UNSAVED")]
118 Unsaved,
119 #[serde(alias = "LOCKED")]
120 Locked,
121 #[serde(alias = "READY")]
122 Ready,
123 #[serde(alias = "TEMP")]
124 Temp,
125}
126
127#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
128pub enum JadeNetworks {
129 #[serde(alias = "MAIN")]
130 Main,
131 #[serde(alias = "TEST")]
132 Test,
133 #[serde(alias = "ALL")]
134 All,
135}
136
137#[derive(Debug, Serialize, Deserialize)]
138pub struct DescriptorInfoResponse {
139 pub descriptor_len: u32,
140 pub num_datavalues: u32,
141}
142
143#[derive(Debug, Serialize, Deserialize)]
144pub struct GetRegisteredDescriptorParams<'a> {
145 pub descriptor_name: &'a str,
146}
147
148#[derive(Debug, Serialize, Deserialize)]
149pub struct GetRegisteredDescriptorResponse {
150 pub descriptor_name: String,
151 pub descriptor: String,
152 pub datavalues: BTreeMap<String, String>,
153}
154
155#[derive(Debug, Serialize, Deserialize)]
156pub struct RegisterDescriptorParams<'a> {
157 pub network: &'a str,
158 pub descriptor_name: &'a str,
159 pub descriptor: String,
160 pub datavalues: BTreeMap<String, String>,
161}
162
163#[derive(Debug, Serialize, Deserialize)]
164pub struct DescriptorAddressParams<'a> {
165 pub network: &'a str,
166 pub branch: u32,
167 pub pointer: u32,
168 pub descriptor_name: &'a str,
169}
170
171#[derive(Debug, Serialize, Deserialize)]
172pub struct SignPsbtParams<'a> {
173 pub network: &'a str,
174 #[serde(with = "serde_bytes")]
175 pub psbt: Vec<u8>,
176}
177
178#[derive(Debug, Serialize, Deserialize)]
179pub struct GetExtendedDataParams<'a> {
180 pub origid: &'a str,
181 pub orig: &'a str,
182 pub seqnum: u32,
183 pub seqlen: u32,
184}
185
186#[derive(Debug, Serialize, Deserialize)]
187pub struct ResponseBytes {
188 pub id: String,
189 pub seqlen: Option<u32>,
190 pub seqnum: Option<u32>,
191 #[serde(with = "serde_bytes")]
192 pub result: Option<Vec<u8>>,
193 pub error: Option<Error>,
194}