@@ -16,6 +16,9 @@ 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 , LSPS5_REMOVE_WEBHOOK_METHOD_NAME , LSPS5_SET_WEBHOOK_METHOD_NAME
21+ } ;
1922use crate :: prelude:: { HashMap , String } ;
2023
2124use lightning:: ln:: msgs:: LightningError ;
@@ -58,6 +61,9 @@ pub(crate) enum LSPSMethod {
5861 LSPS1CreateOrder ,
5962 LSPS2GetInfo ,
6063 LSPS2Buy ,
64+ LSPS5SetWebhook ,
65+ LSPS5ListWebhooks ,
66+ LSPS5RemoveWebhook ,
6167}
6268
6369impl LSPSMethod {
@@ -69,6 +75,9 @@ impl LSPSMethod {
6975 Self :: LSPS1GetOrder => LSPS1_GET_ORDER_METHOD_NAME ,
7076 Self :: LSPS2GetInfo => LSPS2_GET_INFO_METHOD_NAME ,
7177 Self :: LSPS2Buy => LSPS2_BUY_METHOD_NAME ,
78+ Self :: LSPS5SetWebhook => LSPS5_SET_WEBHOOK_METHOD_NAME ,
79+ Self :: LSPS5ListWebhooks => LSPS5_LIST_WEBHOOKS_METHOD_NAME ,
80+ Self :: LSPS5RemoveWebhook => LSPS5_REMOVE_WEBHOOK_METHOD_NAME ,
7281 }
7382 }
7483}
@@ -83,6 +92,10 @@ impl FromStr for LSPSMethod {
8392 LSPS1_GET_ORDER_METHOD_NAME => Ok ( Self :: LSPS1GetOrder ) ,
8493 LSPS2_GET_INFO_METHOD_NAME => Ok ( Self :: LSPS2GetInfo ) ,
8594 LSPS2_BUY_METHOD_NAME => Ok ( Self :: LSPS2Buy ) ,
95+ // Add LSPS5 methods
96+ LSPS5_SET_WEBHOOK_METHOD_NAME => Ok ( Self :: LSPS5SetWebhook ) ,
97+ LSPS5_LIST_WEBHOOKS_METHOD_NAME => Ok ( Self :: LSPS5ListWebhooks ) ,
98+ LSPS5_REMOVE_WEBHOOK_METHOD_NAME => Ok ( Self :: LSPS5RemoveWebhook ) ,
8699 _ => Err ( & "Unknown method name" ) ,
87100 }
88101 }
@@ -115,6 +128,17 @@ impl From<&LSPS2Request> for LSPSMethod {
115128 }
116129}
117130
131+ // Add implementation for LSPS5Request
132+ impl From < & LSPS5Request > for LSPSMethod {
133+ fn from ( value : & LSPS5Request ) -> Self {
134+ match value {
135+ LSPS5Request :: SetWebhook ( _) => Self :: LSPS5SetWebhook ,
136+ LSPS5Request :: ListWebhooks ( _) => Self :: LSPS5ListWebhooks ,
137+ LSPS5Request :: RemoveWebhook ( _) => Self :: LSPS5RemoveWebhook ,
138+ }
139+ }
140+ }
141+
118142impl < ' de > Deserialize < ' de > for LSPSMethod {
119143 fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
120144 where
@@ -252,6 +276,8 @@ pub enum LSPSMessage {
252276 LSPS1 ( LSPS1Message ) ,
253277 /// An LSPS2 message.
254278 LSPS2 ( LSPS2Message ) ,
279+ /// An LSPS5 message.
280+ LSPS5 ( LSPS5Message ) ,
255281}
256282
257283impl LSPSMessage {
@@ -279,6 +305,10 @@ impl LSPSMessage {
279305 LSPSMessage :: LSPS2 ( LSPS2Message :: Request ( request_id, request) ) => {
280306 Some ( ( LSPSRequestId ( request_id. 0 . clone ( ) ) , request. into ( ) ) )
281307 } ,
308+ // Add LSPS5
309+ LSPSMessage :: LSPS5 ( LSPS5Message :: Request ( request_id, request) ) => {
310+ Some ( ( LSPSRequestId ( request_id. 0 . clone ( ) ) , request. into ( ) ) )
311+ } ,
282312 _ => None ,
283313 }
284314 }
@@ -395,6 +425,47 @@ impl Serialize for LSPSMessage {
395425 jsonrpc_object. serialize_field ( JSONRPC_ID_FIELD_KEY , & serde_json:: Value :: Null ) ?;
396426 jsonrpc_object. serialize_field ( JSONRPC_ERROR_FIELD_KEY , & error) ?;
397427 } ,
428+ LSPSMessage :: LSPS5 ( LSPS5Message :: Request ( request_id, request) ) => {
429+ jsonrpc_object. serialize_field ( JSONRPC_ID_FIELD_KEY , & request_id. 0 ) ?;
430+ jsonrpc_object
431+ . serialize_field ( JSONRPC_METHOD_FIELD_KEY , & LSPSMethod :: from ( request) ) ?;
432+
433+ match request {
434+ LSPS5Request :: SetWebhook ( params) => {
435+ jsonrpc_object. serialize_field ( JSONRPC_PARAMS_FIELD_KEY , params) ?
436+ } ,
437+ LSPS5Request :: ListWebhooks ( params) => {
438+ jsonrpc_object. serialize_field ( JSONRPC_PARAMS_FIELD_KEY , params) ?
439+ } ,
440+ LSPS5Request :: RemoveWebhook ( params) => {
441+ jsonrpc_object. serialize_field ( JSONRPC_PARAMS_FIELD_KEY , params) ?
442+ } ,
443+ }
444+ } ,
445+ LSPSMessage :: LSPS5 ( LSPS5Message :: Response ( request_id, response) ) => {
446+ jsonrpc_object. serialize_field ( JSONRPC_ID_FIELD_KEY , & request_id. 0 ) ?;
447+
448+ match response {
449+ LSPS5Response :: SetWebhook ( result) => {
450+ jsonrpc_object. serialize_field ( JSONRPC_RESULT_FIELD_KEY , result) ?
451+ } ,
452+ LSPS5Response :: SetWebhookError ( error) => {
453+ jsonrpc_object. serialize_field ( JSONRPC_ERROR_FIELD_KEY , error) ?
454+ } ,
455+ LSPS5Response :: ListWebhooks ( result) => {
456+ jsonrpc_object. serialize_field ( JSONRPC_RESULT_FIELD_KEY , result) ?
457+ } ,
458+ LSPS5Response :: ListWebhooksError ( error) => {
459+ jsonrpc_object. serialize_field ( JSONRPC_ERROR_FIELD_KEY , error) ?
460+ } ,
461+ LSPS5Response :: RemoveWebhook ( result) => {
462+ jsonrpc_object. serialize_field ( JSONRPC_RESULT_FIELD_KEY , result) ?
463+ } ,
464+ LSPS5Response :: RemoveWebhookError ( error) => {
465+ jsonrpc_object. serialize_field ( JSONRPC_ERROR_FIELD_KEY , error) ?
466+ } ,
467+ }
468+ } ,
398469 }
399470
400471 jsonrpc_object. end ( )
@@ -508,6 +579,31 @@ impl<'de, 'a> Visitor<'de> for LSPSMessageVisitor<'a> {
508579 . map_err ( de:: Error :: custom) ?;
509580 Ok ( LSPSMessage :: LSPS2 ( LSPS2Message :: Request ( id, LSPS2Request :: Buy ( request) ) ) )
510581 } ,
582+ // Add LSPS5 methods
583+ LSPSMethod :: LSPS5SetWebhook => {
584+ let request = serde_json:: from_value ( params. unwrap_or ( json ! ( { } ) ) )
585+ . map_err ( de:: Error :: custom) ?;
586+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Request (
587+ id,
588+ LSPS5Request :: SetWebhook ( request) ,
589+ ) ) )
590+ } ,
591+ LSPSMethod :: LSPS5ListWebhooks => {
592+ let request = serde_json:: from_value ( params. unwrap_or ( json ! ( { } ) ) )
593+ . map_err ( de:: Error :: custom) ?;
594+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Request (
595+ id,
596+ LSPS5Request :: ListWebhooks ( request) ,
597+ ) ) )
598+ } ,
599+ LSPSMethod :: LSPS5RemoveWebhook => {
600+ let request = serde_json:: from_value ( params. unwrap_or ( json ! ( { } ) ) )
601+ . map_err ( de:: Error :: custom) ?;
602+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Request (
603+ id,
604+ LSPS5Request :: RemoveWebhook ( request) ,
605+ ) ) )
606+ } ,
511607 } ,
512608 None => match self . request_id_to_method_map . remove ( & id) {
513609 Some ( method) => match method {
@@ -613,6 +709,58 @@ impl<'de, 'a> Visitor<'de> for LSPSMessageVisitor<'a> {
613709 Err ( de:: Error :: custom ( "Received invalid JSON-RPC object: one of method, result, or error required" ) )
614710 }
615711 } ,
712+ // Add LSPS5 methods
713+ LSPSMethod :: LSPS5SetWebhook => {
714+ if let Some ( error) = error {
715+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
716+ id,
717+ LSPS5Response :: SetWebhookError ( error) ,
718+ ) ) )
719+ } else if let Some ( result) = result {
720+ let response =
721+ serde_json:: from_value ( result) . map_err ( de:: Error :: custom) ?;
722+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
723+ id,
724+ LSPS5Response :: SetWebhook ( response) ,
725+ ) ) )
726+ } else {
727+ Err ( de:: Error :: custom ( "Received invalid JSON-RPC object: one of method, result, or error required" ) )
728+ }
729+ } ,
730+ LSPSMethod :: LSPS5ListWebhooks => {
731+ if let Some ( error) = error {
732+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
733+ id,
734+ LSPS5Response :: ListWebhooksError ( error) ,
735+ ) ) )
736+ } else if let Some ( result) = result {
737+ let response =
738+ serde_json:: from_value ( result) . map_err ( de:: Error :: custom) ?;
739+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
740+ id,
741+ LSPS5Response :: ListWebhooks ( response) ,
742+ ) ) )
743+ } else {
744+ Err ( de:: Error :: custom ( "Received invalid JSON-RPC object: one of method, result, or error required" ) )
745+ }
746+ } ,
747+ LSPSMethod :: LSPS5RemoveWebhook => {
748+ if let Some ( error) = error {
749+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
750+ id,
751+ LSPS5Response :: RemoveWebhookError ( error) ,
752+ ) ) )
753+ } else if let Some ( result) = result {
754+ let response =
755+ serde_json:: from_value ( result) . map_err ( de:: Error :: custom) ?;
756+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
757+ id,
758+ LSPS5Response :: RemoveWebhook ( response) ,
759+ ) ) )
760+ } else {
761+ Err ( de:: Error :: custom ( "Received invalid JSON-RPC object: one of method, result, or error required" ) )
762+ }
763+ } ,
616764 } ,
617765 None => Err ( de:: Error :: custom ( format ! (
618766 "Received response for unknown request id: {}" ,
0 commit comments