@@ -21,6 +21,11 @@ use crate::lsps1::msgs::{
2121use crate :: lsps2:: msgs:: {
2222 LSPS2Message , LSPS2Request , LSPS2Response , LSPS2_BUY_METHOD_NAME , LSPS2_GET_INFO_METHOD_NAME ,
2323} ;
24+ use crate :: lsps5:: msgs:: {
25+ LSPS5Message , LSPS5Request , LSPS5Response , LSPS5_LIST_WEBHOOKS_METHOD_NAME ,
26+ LSPS5_REMOVE_WEBHOOK_METHOD_NAME , LSPS5_SET_WEBHOOK_METHOD_NAME ,
27+ } ;
28+
2429use crate :: prelude:: HashMap ;
2530
2631use chrono:: DateTime ;
@@ -62,6 +67,9 @@ pub(crate) enum LSPSMethod {
6267 LSPS1CreateOrder ,
6368 LSPS2GetInfo ,
6469 LSPS2Buy ,
70+ LSPS5SetWebhook ,
71+ LSPS5ListWebhooks ,
72+ LSPS5RemoveWebhook ,
6573}
6674
6775impl LSPSMethod {
@@ -73,6 +81,9 @@ impl LSPSMethod {
7381 Self :: LSPS1GetOrder => LSPS1_GET_ORDER_METHOD_NAME ,
7482 Self :: LSPS2GetInfo => LSPS2_GET_INFO_METHOD_NAME ,
7583 Self :: LSPS2Buy => LSPS2_BUY_METHOD_NAME ,
84+ Self :: LSPS5SetWebhook => LSPS5_SET_WEBHOOK_METHOD_NAME ,
85+ Self :: LSPS5ListWebhooks => LSPS5_LIST_WEBHOOKS_METHOD_NAME ,
86+ Self :: LSPS5RemoveWebhook => LSPS5_REMOVE_WEBHOOK_METHOD_NAME ,
7687 }
7788 }
7889}
@@ -87,6 +98,9 @@ impl FromStr for LSPSMethod {
8798 LSPS1_GET_ORDER_METHOD_NAME => Ok ( Self :: LSPS1GetOrder ) ,
8899 LSPS2_GET_INFO_METHOD_NAME => Ok ( Self :: LSPS2GetInfo ) ,
89100 LSPS2_BUY_METHOD_NAME => Ok ( Self :: LSPS2Buy ) ,
101+ LSPS5_SET_WEBHOOK_METHOD_NAME => Ok ( Self :: LSPS5SetWebhook ) ,
102+ LSPS5_LIST_WEBHOOKS_METHOD_NAME => Ok ( Self :: LSPS5ListWebhooks ) ,
103+ LSPS5_REMOVE_WEBHOOK_METHOD_NAME => Ok ( Self :: LSPS5RemoveWebhook ) ,
90104 _ => Err ( & "Unknown method name" ) ,
91105 }
92106 }
@@ -119,6 +133,16 @@ impl From<&LSPS2Request> for LSPSMethod {
119133 }
120134}
121135
136+ impl From < & LSPS5Request > for LSPSMethod {
137+ fn from ( value : & LSPS5Request ) -> Self {
138+ match value {
139+ LSPS5Request :: SetWebhook ( _) => Self :: LSPS5SetWebhook ,
140+ LSPS5Request :: ListWebhooks ( _) => Self :: LSPS5ListWebhooks ,
141+ LSPS5Request :: RemoveWebhook ( _) => Self :: LSPS5RemoveWebhook ,
142+ }
143+ }
144+ }
145+
122146impl < ' de > Deserialize < ' de > for LSPSMethod {
123147 fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
124148 where
@@ -267,6 +291,8 @@ pub enum LSPSMessage {
267291 LSPS1 ( LSPS1Message ) ,
268292 /// An LSPS2 message.
269293 LSPS2 ( LSPS2Message ) ,
294+ /// An LSPS5 message.
295+ LSPS5 ( LSPS5Message ) ,
270296}
271297
272298impl LSPSMessage {
@@ -294,6 +320,10 @@ impl LSPSMessage {
294320 LSPSMessage :: LSPS2 ( LSPS2Message :: Request ( request_id, request) ) => {
295321 Some ( ( LSPSRequestId ( request_id. 0 . clone ( ) ) , request. into ( ) ) )
296322 } ,
323+ // Add LSPS5
324+ LSPSMessage :: LSPS5 ( LSPS5Message :: Request ( request_id, request) ) => {
325+ Some ( ( LSPSRequestId ( request_id. 0 . clone ( ) ) , request. into ( ) ) )
326+ } ,
297327 _ => None ,
298328 }
299329 }
@@ -410,6 +440,47 @@ impl Serialize for LSPSMessage {
410440 jsonrpc_object. serialize_field ( JSONRPC_ID_FIELD_KEY , & serde_json:: Value :: Null ) ?;
411441 jsonrpc_object. serialize_field ( JSONRPC_ERROR_FIELD_KEY , & error) ?;
412442 } ,
443+ LSPSMessage :: LSPS5 ( LSPS5Message :: Request ( request_id, request) ) => {
444+ jsonrpc_object. serialize_field ( JSONRPC_ID_FIELD_KEY , & request_id. 0 ) ?;
445+ jsonrpc_object
446+ . serialize_field ( JSONRPC_METHOD_FIELD_KEY , & LSPSMethod :: from ( request) ) ?;
447+
448+ match request {
449+ LSPS5Request :: SetWebhook ( params) => {
450+ jsonrpc_object. serialize_field ( JSONRPC_PARAMS_FIELD_KEY , params) ?
451+ } ,
452+ LSPS5Request :: ListWebhooks ( params) => {
453+ jsonrpc_object. serialize_field ( JSONRPC_PARAMS_FIELD_KEY , params) ?
454+ } ,
455+ LSPS5Request :: RemoveWebhook ( params) => {
456+ jsonrpc_object. serialize_field ( JSONRPC_PARAMS_FIELD_KEY , params) ?
457+ } ,
458+ }
459+ } ,
460+ LSPSMessage :: LSPS5 ( LSPS5Message :: Response ( request_id, response) ) => {
461+ jsonrpc_object. serialize_field ( JSONRPC_ID_FIELD_KEY , & request_id. 0 ) ?;
462+
463+ match response {
464+ LSPS5Response :: SetWebhook ( result) => {
465+ jsonrpc_object. serialize_field ( JSONRPC_RESULT_FIELD_KEY , result) ?
466+ } ,
467+ LSPS5Response :: SetWebhookError ( error) => {
468+ jsonrpc_object. serialize_field ( JSONRPC_ERROR_FIELD_KEY , error) ?
469+ } ,
470+ LSPS5Response :: ListWebhooks ( result) => {
471+ jsonrpc_object. serialize_field ( JSONRPC_RESULT_FIELD_KEY , result) ?
472+ } ,
473+ LSPS5Response :: ListWebhooksError ( error) => {
474+ jsonrpc_object. serialize_field ( JSONRPC_ERROR_FIELD_KEY , error) ?
475+ } ,
476+ LSPS5Response :: RemoveWebhook ( result) => {
477+ jsonrpc_object. serialize_field ( JSONRPC_RESULT_FIELD_KEY , result) ?
478+ } ,
479+ LSPS5Response :: RemoveWebhookError ( error) => {
480+ jsonrpc_object. serialize_field ( JSONRPC_ERROR_FIELD_KEY , error) ?
481+ } ,
482+ }
483+ } ,
413484 }
414485
415486 jsonrpc_object. end ( )
@@ -523,6 +594,31 @@ impl<'de, 'a> Visitor<'de> for LSPSMessageVisitor<'a> {
523594 . map_err ( de:: Error :: custom) ?;
524595 Ok ( LSPSMessage :: LSPS2 ( LSPS2Message :: Request ( id, LSPS2Request :: Buy ( request) ) ) )
525596 } ,
597+ // Add LSPS5 methods
598+ LSPSMethod :: LSPS5SetWebhook => {
599+ let request = serde_json:: from_value ( params. unwrap_or ( json ! ( { } ) ) )
600+ . map_err ( de:: Error :: custom) ?;
601+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Request (
602+ id,
603+ LSPS5Request :: SetWebhook ( request) ,
604+ ) ) )
605+ } ,
606+ LSPSMethod :: LSPS5ListWebhooks => {
607+ let request = serde_json:: from_value ( params. unwrap_or ( json ! ( { } ) ) )
608+ . map_err ( de:: Error :: custom) ?;
609+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Request (
610+ id,
611+ LSPS5Request :: ListWebhooks ( request) ,
612+ ) ) )
613+ } ,
614+ LSPSMethod :: LSPS5RemoveWebhook => {
615+ let request = serde_json:: from_value ( params. unwrap_or ( json ! ( { } ) ) )
616+ . map_err ( de:: Error :: custom) ?;
617+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Request (
618+ id,
619+ LSPS5Request :: RemoveWebhook ( request) ,
620+ ) ) )
621+ } ,
526622 } ,
527623 None => match self . request_id_to_method_map . remove ( & id) {
528624 Some ( method) => match method {
@@ -628,6 +724,58 @@ impl<'de, 'a> Visitor<'de> for LSPSMessageVisitor<'a> {
628724 Err ( de:: Error :: custom ( "Received invalid JSON-RPC object: one of method, result, or error required" ) )
629725 }
630726 } ,
727+ // Add LSPS5 methods
728+ LSPSMethod :: LSPS5SetWebhook => {
729+ if let Some ( error) = error {
730+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
731+ id,
732+ LSPS5Response :: SetWebhookError ( error) ,
733+ ) ) )
734+ } else if let Some ( result) = result {
735+ let response =
736+ serde_json:: from_value ( result) . map_err ( de:: Error :: custom) ?;
737+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
738+ id,
739+ LSPS5Response :: SetWebhook ( response) ,
740+ ) ) )
741+ } else {
742+ Err ( de:: Error :: custom ( "Received invalid JSON-RPC object: one of method, result, or error required" ) )
743+ }
744+ } ,
745+ LSPSMethod :: LSPS5ListWebhooks => {
746+ if let Some ( error) = error {
747+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
748+ id,
749+ LSPS5Response :: ListWebhooksError ( error) ,
750+ ) ) )
751+ } else if let Some ( result) = result {
752+ let response =
753+ serde_json:: from_value ( result) . map_err ( de:: Error :: custom) ?;
754+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
755+ id,
756+ LSPS5Response :: ListWebhooks ( response) ,
757+ ) ) )
758+ } else {
759+ Err ( de:: Error :: custom ( "Received invalid JSON-RPC object: one of method, result, or error required" ) )
760+ }
761+ } ,
762+ LSPSMethod :: LSPS5RemoveWebhook => {
763+ if let Some ( error) = error {
764+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
765+ id,
766+ LSPS5Response :: RemoveWebhookError ( error) ,
767+ ) ) )
768+ } else if let Some ( result) = result {
769+ let response =
770+ serde_json:: from_value ( result) . map_err ( de:: Error :: custom) ?;
771+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
772+ id,
773+ LSPS5Response :: RemoveWebhook ( response) ,
774+ ) ) )
775+ } else {
776+ Err ( de:: Error :: custom ( "Received invalid JSON-RPC object: one of method, result, or error required" ) )
777+ }
778+ } ,
631779 } ,
632780 None => Err ( de:: Error :: custom ( format ! (
633781 "Received response for unknown request id: {}" ,
0 commit comments