cdk_common/
ws.rs

1//! Websocket types and functions for the CDK.
2//!
3//! This module extends the `cashu` crate with types and functions for the CDK, using the correct
4//! expected ID types.
5#[cfg(feature = "mint")]
6use cashu::nut17::ws::JSON_RPC_VERSION;
7use cashu::nut17::{self};
8#[cfg(feature = "mint")]
9use cashu::NotificationPayload;
10#[cfg(feature = "mint")]
11use uuid::Uuid;
12
13use crate::pub_sub::SubId;
14
15pub type WsUnsubscribeRequest = nut17::ws::WsUnsubscribeRequest<SubId>;
16pub type WsNotification = nut17::ws::WsNotification<SubId>;
17pub type WsSubscribeResponse = nut17::ws::WsSubscribeResponse<SubId>;
18pub type WsResponseResult = nut17::ws::WsResponseResult<SubId>;
19pub type WsUnsubscribeResponse = nut17::ws::WsUnsubscribeResponse<SubId>;
20pub type WsRequest = nut17::ws::WsRequest<SubId>;
21pub type WsResponse = nut17::ws::WsResponse<SubId>;
22pub type WsMethodRequest = nut17::ws::WsMethodRequest<SubId>;
23pub type WsErrorBody = nut17::ws::WsErrorBody;
24pub type WsMessageOrResponse = nut17::ws::WsMessageOrResponse<SubId>;
25pub type NotificationInner<T> = nut17::ws::NotificationInner<T, SubId>;
26
27#[cfg(feature = "mint")]
28pub fn notification_uuid_to_notification_string(
29    notification: NotificationInner<Uuid>,
30) -> NotificationInner<String> {
31    nut17::ws::NotificationInner {
32        sub_id: notification.sub_id,
33        payload: match notification.payload {
34            NotificationPayload::ProofState(pk) => NotificationPayload::ProofState(pk),
35            NotificationPayload::MeltQuoteBolt11Response(quote) => {
36                NotificationPayload::MeltQuoteBolt11Response(quote.to_string_id())
37            }
38            NotificationPayload::MintQuoteBolt11Response(quote) => {
39                NotificationPayload::MintQuoteBolt11Response(quote.to_string_id())
40            }
41        },
42    }
43}
44
45#[cfg(feature = "mint")]
46pub fn notification_to_ws_message(notification: NotificationInner<Uuid>) -> WsMessageOrResponse {
47    nut17::ws::WsMessageOrResponse::Notification(nut17::ws::WsNotification {
48        jsonrpc: JSON_RPC_VERSION.to_owned(),
49        method: "subscribe".to_string(),
50        params: notification_uuid_to_notification_string(notification),
51    })
52}