@@ -16,6 +16,10 @@ use crate::lsps1::msgs::{
1616use crate :: lsps2:: msgs:: {
1717 LSPS2Message , LSPS2Request , LSPS2Response , LSPS2_BUY_METHOD_NAME , LSPS2_GET_INFO_METHOD_NAME ,
1818} ;
19+ use crate :: lsps5:: msgs:: {
20+ LSPS5Message , LSPS5Request , LSPS5Response , LSPS5_LIST_WEBHOOKS_METHOD_NAME ,
21+ LSPS5_REMOVE_WEBHOOK_METHOD_NAME , LSPS5_SET_WEBHOOK_METHOD_NAME ,
22+ } ;
1923use crate :: prelude:: { HashMap , String } ;
2024
2125use chrono:: DateTime ;
@@ -60,6 +64,9 @@ pub(crate) enum LSPSMethod {
6064 LSPS1CreateOrder ,
6165 LSPS2GetInfo ,
6266 LSPS2Buy ,
67+ LSPS5SetWebhook ,
68+ LSPS5ListWebhooks ,
69+ LSPS5RemoveWebhook ,
6370}
6471
6572impl LSPSMethod {
@@ -71,6 +78,9 @@ impl LSPSMethod {
7178 Self :: LSPS1GetOrder => LSPS1_GET_ORDER_METHOD_NAME ,
7279 Self :: LSPS2GetInfo => LSPS2_GET_INFO_METHOD_NAME ,
7380 Self :: LSPS2Buy => LSPS2_BUY_METHOD_NAME ,
81+ Self :: LSPS5SetWebhook => LSPS5_SET_WEBHOOK_METHOD_NAME ,
82+ Self :: LSPS5ListWebhooks => LSPS5_LIST_WEBHOOKS_METHOD_NAME ,
83+ Self :: LSPS5RemoveWebhook => LSPS5_REMOVE_WEBHOOK_METHOD_NAME ,
7484 }
7585 }
7686}
@@ -85,6 +95,9 @@ impl FromStr for LSPSMethod {
8595 LSPS1_GET_ORDER_METHOD_NAME => Ok ( Self :: LSPS1GetOrder ) ,
8696 LSPS2_GET_INFO_METHOD_NAME => Ok ( Self :: LSPS2GetInfo ) ,
8797 LSPS2_BUY_METHOD_NAME => Ok ( Self :: LSPS2Buy ) ,
98+ LSPS5_SET_WEBHOOK_METHOD_NAME => Ok ( Self :: LSPS5SetWebhook ) ,
99+ LSPS5_LIST_WEBHOOKS_METHOD_NAME => Ok ( Self :: LSPS5ListWebhooks ) ,
100+ LSPS5_REMOVE_WEBHOOK_METHOD_NAME => Ok ( Self :: LSPS5RemoveWebhook ) ,
88101 _ => Err ( & "Unknown method name" ) ,
89102 }
90103 }
@@ -117,6 +130,16 @@ impl From<&LSPS2Request> for LSPSMethod {
117130 }
118131}
119132
133+ impl From < & LSPS5Request > for LSPSMethod {
134+ fn from ( value : & LSPS5Request ) -> Self {
135+ match value {
136+ LSPS5Request :: SetWebhook ( _) => Self :: LSPS5SetWebhook ,
137+ LSPS5Request :: ListWebhooks ( _) => Self :: LSPS5ListWebhooks ,
138+ LSPS5Request :: RemoveWebhook ( _) => Self :: LSPS5RemoveWebhook ,
139+ }
140+ }
141+ }
142+
120143impl < ' de > Deserialize < ' de > for LSPSMethod {
121144 fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
122145 where
@@ -265,6 +288,8 @@ pub enum LSPSMessage {
265288 LSPS1 ( LSPS1Message ) ,
266289 /// An LSPS2 message.
267290 LSPS2 ( LSPS2Message ) ,
291+ /// An LSPS5 message.
292+ LSPS5 ( LSPS5Message ) ,
268293}
269294
270295impl LSPSMessage {
@@ -292,6 +317,10 @@ impl LSPSMessage {
292317 LSPSMessage :: LSPS2 ( LSPS2Message :: Request ( request_id, request) ) => {
293318 Some ( ( LSPSRequestId ( request_id. 0 . clone ( ) ) , request. into ( ) ) )
294319 } ,
320+ // Add LSPS5
321+ LSPSMessage :: LSPS5 ( LSPS5Message :: Request ( request_id, request) ) => {
322+ Some ( ( LSPSRequestId ( request_id. 0 . clone ( ) ) , request. into ( ) ) )
323+ } ,
295324 _ => None ,
296325 }
297326 }
@@ -408,6 +437,47 @@ impl Serialize for LSPSMessage {
408437 jsonrpc_object. serialize_field ( JSONRPC_ID_FIELD_KEY , & serde_json:: Value :: Null ) ?;
409438 jsonrpc_object. serialize_field ( JSONRPC_ERROR_FIELD_KEY , & error) ?;
410439 } ,
440+ LSPSMessage :: LSPS5 ( LSPS5Message :: Request ( request_id, request) ) => {
441+ jsonrpc_object. serialize_field ( JSONRPC_ID_FIELD_KEY , & request_id. 0 ) ?;
442+ jsonrpc_object
443+ . serialize_field ( JSONRPC_METHOD_FIELD_KEY , & LSPSMethod :: from ( request) ) ?;
444+
445+ match request {
446+ LSPS5Request :: SetWebhook ( params) => {
447+ jsonrpc_object. serialize_field ( JSONRPC_PARAMS_FIELD_KEY , params) ?
448+ } ,
449+ LSPS5Request :: ListWebhooks ( params) => {
450+ jsonrpc_object. serialize_field ( JSONRPC_PARAMS_FIELD_KEY , params) ?
451+ } ,
452+ LSPS5Request :: RemoveWebhook ( params) => {
453+ jsonrpc_object. serialize_field ( JSONRPC_PARAMS_FIELD_KEY , params) ?
454+ } ,
455+ }
456+ } ,
457+ LSPSMessage :: LSPS5 ( LSPS5Message :: Response ( request_id, response) ) => {
458+ jsonrpc_object. serialize_field ( JSONRPC_ID_FIELD_KEY , & request_id. 0 ) ?;
459+
460+ match response {
461+ LSPS5Response :: SetWebhook ( result) => {
462+ jsonrpc_object. serialize_field ( JSONRPC_RESULT_FIELD_KEY , result) ?
463+ } ,
464+ LSPS5Response :: SetWebhookError ( error) => {
465+ jsonrpc_object. serialize_field ( JSONRPC_ERROR_FIELD_KEY , error) ?
466+ } ,
467+ LSPS5Response :: ListWebhooks ( result) => {
468+ jsonrpc_object. serialize_field ( JSONRPC_RESULT_FIELD_KEY , result) ?
469+ } ,
470+ LSPS5Response :: ListWebhooksError ( error) => {
471+ jsonrpc_object. serialize_field ( JSONRPC_ERROR_FIELD_KEY , error) ?
472+ } ,
473+ LSPS5Response :: RemoveWebhook ( result) => {
474+ jsonrpc_object. serialize_field ( JSONRPC_RESULT_FIELD_KEY , result) ?
475+ } ,
476+ LSPS5Response :: RemoveWebhookError ( error) => {
477+ jsonrpc_object. serialize_field ( JSONRPC_ERROR_FIELD_KEY , error) ?
478+ } ,
479+ }
480+ } ,
411481 }
412482
413483 jsonrpc_object. end ( )
@@ -521,6 +591,31 @@ impl<'de, 'a> Visitor<'de> for LSPSMessageVisitor<'a> {
521591 . map_err ( de:: Error :: custom) ?;
522592 Ok ( LSPSMessage :: LSPS2 ( LSPS2Message :: Request ( id, LSPS2Request :: Buy ( request) ) ) )
523593 } ,
594+ // Add LSPS5 methods
595+ LSPSMethod :: LSPS5SetWebhook => {
596+ let request = serde_json:: from_value ( params. unwrap_or ( json ! ( { } ) ) )
597+ . map_err ( de:: Error :: custom) ?;
598+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Request (
599+ id,
600+ LSPS5Request :: SetWebhook ( request) ,
601+ ) ) )
602+ } ,
603+ LSPSMethod :: LSPS5ListWebhooks => {
604+ let request = serde_json:: from_value ( params. unwrap_or ( json ! ( { } ) ) )
605+ . map_err ( de:: Error :: custom) ?;
606+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Request (
607+ id,
608+ LSPS5Request :: ListWebhooks ( request) ,
609+ ) ) )
610+ } ,
611+ LSPSMethod :: LSPS5RemoveWebhook => {
612+ let request = serde_json:: from_value ( params. unwrap_or ( json ! ( { } ) ) )
613+ . map_err ( de:: Error :: custom) ?;
614+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Request (
615+ id,
616+ LSPS5Request :: RemoveWebhook ( request) ,
617+ ) ) )
618+ } ,
524619 } ,
525620 None => match self . request_id_to_method_map . remove ( & id) {
526621 Some ( method) => match method {
@@ -626,6 +721,58 @@ impl<'de, 'a> Visitor<'de> for LSPSMessageVisitor<'a> {
626721 Err ( de:: Error :: custom ( "Received invalid JSON-RPC object: one of method, result, or error required" ) )
627722 }
628723 } ,
724+ // Add LSPS5 methods
725+ LSPSMethod :: LSPS5SetWebhook => {
726+ if let Some ( error) = error {
727+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
728+ id,
729+ LSPS5Response :: SetWebhookError ( error) ,
730+ ) ) )
731+ } else if let Some ( result) = result {
732+ let response =
733+ serde_json:: from_value ( result) . map_err ( de:: Error :: custom) ?;
734+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
735+ id,
736+ LSPS5Response :: SetWebhook ( response) ,
737+ ) ) )
738+ } else {
739+ Err ( de:: Error :: custom ( "Received invalid JSON-RPC object: one of method, result, or error required" ) )
740+ }
741+ } ,
742+ LSPSMethod :: LSPS5ListWebhooks => {
743+ if let Some ( error) = error {
744+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
745+ id,
746+ LSPS5Response :: ListWebhooksError ( error) ,
747+ ) ) )
748+ } else if let Some ( result) = result {
749+ let response =
750+ serde_json:: from_value ( result) . map_err ( de:: Error :: custom) ?;
751+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
752+ id,
753+ LSPS5Response :: ListWebhooks ( response) ,
754+ ) ) )
755+ } else {
756+ Err ( de:: Error :: custom ( "Received invalid JSON-RPC object: one of method, result, or error required" ) )
757+ }
758+ } ,
759+ LSPSMethod :: LSPS5RemoveWebhook => {
760+ if let Some ( error) = error {
761+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
762+ id,
763+ LSPS5Response :: RemoveWebhookError ( error) ,
764+ ) ) )
765+ } else if let Some ( result) = result {
766+ let response =
767+ serde_json:: from_value ( result) . map_err ( de:: Error :: custom) ?;
768+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
769+ id,
770+ LSPS5Response :: RemoveWebhook ( response) ,
771+ ) ) )
772+ } else {
773+ Err ( de:: Error :: custom ( "Received invalid JSON-RPC object: one of method, result, or error required" ) )
774+ }
775+ } ,
629776 } ,
630777 None => Err ( de:: Error :: custom ( format ! (
631778 "Received response for unknown request id: {}" ,
0 commit comments