ws.rs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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")]
  6. use cashu::nut17::ws::JSON_RPC_VERSION;
  7. use cashu::nut17::{self};
  8. #[cfg(feature = "mint")]
  9. use cashu::NotificationPayload;
  10. #[cfg(feature = "mint")]
  11. use uuid::Uuid;
  12. use crate::pub_sub::SubId;
  13. pub type WsUnsubscribeRequest = nut17::ws::WsUnsubscribeRequest<SubId>;
  14. pub type WsNotification = nut17::ws::WsNotification<SubId>;
  15. pub type WsSubscribeResponse = nut17::ws::WsSubscribeResponse<SubId>;
  16. pub type WsResponseResult = nut17::ws::WsResponseResult<SubId>;
  17. pub type WsUnsubscribeResponse = nut17::ws::WsUnsubscribeResponse<SubId>;
  18. pub type WsRequest = nut17::ws::WsRequest<SubId>;
  19. pub type WsResponse = nut17::ws::WsResponse<SubId>;
  20. pub type WsMethodRequest = nut17::ws::WsMethodRequest<SubId>;
  21. pub type WsErrorBody = nut17::ws::WsErrorBody;
  22. pub type WsMessageOrResponse = nut17::ws::WsMessageOrResponse<SubId>;
  23. pub type NotificationInner<T> = nut17::ws::NotificationInner<T, SubId>;
  24. #[cfg(feature = "mint")]
  25. pub fn notification_uuid_to_notification_string(
  26. notification: NotificationInner<Uuid>,
  27. ) -> NotificationInner<String> {
  28. nut17::ws::NotificationInner {
  29. sub_id: notification.sub_id,
  30. payload: match notification.payload {
  31. NotificationPayload::ProofState(pk) => NotificationPayload::ProofState(pk),
  32. NotificationPayload::MeltQuoteBolt11Response(quote) => {
  33. NotificationPayload::MeltQuoteBolt11Response(quote.to_string_id())
  34. }
  35. NotificationPayload::MintQuoteBolt11Response(quote) => {
  36. NotificationPayload::MintQuoteBolt11Response(quote.to_string_id())
  37. }
  38. },
  39. }
  40. }
  41. #[cfg(feature = "mint")]
  42. pub fn notification_to_ws_message(notification: NotificationInner<Uuid>) -> WsMessageOrResponse {
  43. nut17::ws::WsMessageOrResponse::Notification(nut17::ws::WsNotification {
  44. jsonrpc: JSON_RPC_VERSION.to_owned(),
  45. method: "subscribe".to_string(),
  46. params: notification_uuid_to_notification_string(notification),
  47. })
  48. }