1use std::sync::Arc;
6
7#[cfg(feature = "mint")]
8use cashu::nut17::ws::JSON_RPC_VERSION;
9use cashu::nut17::{self};
10#[cfg(feature = "mint")]
11use cashu::quote_id::QuoteId;
12#[cfg(feature = "mint")]
13use cashu::NotificationPayload;
14
15type SubId = Arc<crate::subscription::SubId>;
16
17pub type WsUnsubscribeRequest = nut17::ws::WsUnsubscribeRequest<SubId>;
19
20pub type WsNotification = nut17::ws::WsNotification<SubId>;
22
23pub type WsSubscribeResponse = nut17::ws::WsSubscribeResponse<SubId>;
25
26pub type WsResponseResult = nut17::ws::WsResponseResult<SubId>;
28
29pub type WsUnsubscribeResponse = nut17::ws::WsUnsubscribeResponse<SubId>;
31
32pub type WsRequest = nut17::ws::WsRequest<SubId>;
34
35pub type WsResponse = nut17::ws::WsResponse<SubId>;
37
38pub type WsMethodRequest = nut17::ws::WsMethodRequest<SubId>;
40
41pub type WsErrorBody = nut17::ws::WsErrorBody;
43
44pub type WsMessageOrResponse = nut17::ws::WsMessageOrResponse<SubId>;
46
47pub type NotificationInner<T> = nut17::ws::NotificationInner<T, SubId>;
49
50#[cfg(feature = "mint")]
51pub fn notification_uuid_to_notification_string(
53 notification: NotificationInner<QuoteId>,
54) -> NotificationInner<String> {
55 nut17::ws::NotificationInner {
56 sub_id: notification.sub_id,
57 payload: match notification.payload {
58 NotificationPayload::ProofState(pk) => NotificationPayload::ProofState(pk),
59 NotificationPayload::MeltQuoteBolt11Response(quote) => {
60 NotificationPayload::MeltQuoteBolt11Response(quote.to_string_id())
61 }
62 NotificationPayload::MintQuoteBolt11Response(quote) => {
63 NotificationPayload::MintQuoteBolt11Response(quote.to_string_id())
64 }
65 NotificationPayload::MintQuoteBolt12Response(quote) => {
66 NotificationPayload::MintQuoteBolt12Response(quote.to_string_id())
67 }
68 },
69 }
70}
71
72#[cfg(feature = "mint")]
73pub fn notification_to_ws_message(notification: NotificationInner<QuoteId>) -> WsMessageOrResponse {
75 nut17::ws::WsMessageOrResponse::Notification(nut17::ws::WsNotification {
76 jsonrpc: JSON_RPC_VERSION.to_owned(),
77 method: "subscribe".to_string(),
78 params: notification_uuid_to_notification_string(notification),
79 })
80}