@@ -16,6 +16,10 @@ use crate::lsps1::msgs::{
16
16
use crate :: lsps2:: msgs:: {
17
17
LSPS2Message , LSPS2Request , LSPS2Response , LSPS2_BUY_METHOD_NAME , LSPS2_GET_INFO_METHOD_NAME ,
18
18
} ;
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
+ } ;
19
23
use crate :: prelude:: { HashMap , String } ;
20
24
21
25
use lightning:: ln:: msgs:: LightningError ;
@@ -58,6 +62,9 @@ pub(crate) enum LSPSMethod {
58
62
LSPS1CreateOrder ,
59
63
LSPS2GetInfo ,
60
64
LSPS2Buy ,
65
+ LSPS5SetWebhook ,
66
+ LSPS5ListWebhooks ,
67
+ LSPS5RemoveWebhook ,
61
68
}
62
69
63
70
impl LSPSMethod {
@@ -69,6 +76,9 @@ impl LSPSMethod {
69
76
Self :: LSPS1GetOrder => LSPS1_GET_ORDER_METHOD_NAME ,
70
77
Self :: LSPS2GetInfo => LSPS2_GET_INFO_METHOD_NAME ,
71
78
Self :: LSPS2Buy => LSPS2_BUY_METHOD_NAME ,
79
+ Self :: LSPS5SetWebhook => LSPS5_SET_WEBHOOK_METHOD_NAME ,
80
+ Self :: LSPS5ListWebhooks => LSPS5_LIST_WEBHOOKS_METHOD_NAME ,
81
+ Self :: LSPS5RemoveWebhook => LSPS5_REMOVE_WEBHOOK_METHOD_NAME ,
72
82
}
73
83
}
74
84
}
@@ -83,6 +93,10 @@ impl FromStr for LSPSMethod {
83
93
LSPS1_GET_ORDER_METHOD_NAME => Ok ( Self :: LSPS1GetOrder ) ,
84
94
LSPS2_GET_INFO_METHOD_NAME => Ok ( Self :: LSPS2GetInfo ) ,
85
95
LSPS2_BUY_METHOD_NAME => Ok ( Self :: LSPS2Buy ) ,
96
+ // Add LSPS5 methods
97
+ LSPS5_SET_WEBHOOK_METHOD_NAME => Ok ( Self :: LSPS5SetWebhook ) ,
98
+ LSPS5_LIST_WEBHOOKS_METHOD_NAME => Ok ( Self :: LSPS5ListWebhooks ) ,
99
+ LSPS5_REMOVE_WEBHOOK_METHOD_NAME => Ok ( Self :: LSPS5RemoveWebhook ) ,
86
100
_ => Err ( & "Unknown method name" ) ,
87
101
}
88
102
}
@@ -115,6 +129,17 @@ impl From<&LSPS2Request> for LSPSMethod {
115
129
}
116
130
}
117
131
132
+ // Add implementation for LSPS5Request
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
+
118
143
impl < ' de > Deserialize < ' de > for LSPSMethod {
119
144
fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
120
145
where
@@ -252,6 +277,8 @@ pub enum LSPSMessage {
252
277
LSPS1 ( LSPS1Message ) ,
253
278
/// An LSPS2 message.
254
279
LSPS2 ( LSPS2Message ) ,
280
+ /// An LSPS5 message.
281
+ LSPS5 ( LSPS5Message ) ,
255
282
}
256
283
257
284
impl LSPSMessage {
@@ -279,6 +306,10 @@ impl LSPSMessage {
279
306
LSPSMessage :: LSPS2 ( LSPS2Message :: Request ( request_id, request) ) => {
280
307
Some ( ( LSPSRequestId ( request_id. 0 . clone ( ) ) , request. into ( ) ) )
281
308
} ,
309
+ // Add LSPS5
310
+ LSPSMessage :: LSPS5 ( LSPS5Message :: Request ( request_id, request) ) => {
311
+ Some ( ( LSPSRequestId ( request_id. 0 . clone ( ) ) , request. into ( ) ) )
312
+ } ,
282
313
_ => None ,
283
314
}
284
315
}
@@ -395,6 +426,47 @@ impl Serialize for LSPSMessage {
395
426
jsonrpc_object. serialize_field ( JSONRPC_ID_FIELD_KEY , & serde_json:: Value :: Null ) ?;
396
427
jsonrpc_object. serialize_field ( JSONRPC_ERROR_FIELD_KEY , & error) ?;
397
428
} ,
429
+ LSPSMessage :: LSPS5 ( LSPS5Message :: Request ( request_id, request) ) => {
430
+ jsonrpc_object. serialize_field ( JSONRPC_ID_FIELD_KEY , & request_id. 0 ) ?;
431
+ jsonrpc_object
432
+ . serialize_field ( JSONRPC_METHOD_FIELD_KEY , & LSPSMethod :: from ( request) ) ?;
433
+
434
+ match request {
435
+ LSPS5Request :: SetWebhook ( params) => {
436
+ jsonrpc_object. serialize_field ( JSONRPC_PARAMS_FIELD_KEY , params) ?
437
+ } ,
438
+ LSPS5Request :: ListWebhooks ( params) => {
439
+ jsonrpc_object. serialize_field ( JSONRPC_PARAMS_FIELD_KEY , params) ?
440
+ } ,
441
+ LSPS5Request :: RemoveWebhook ( params) => {
442
+ jsonrpc_object. serialize_field ( JSONRPC_PARAMS_FIELD_KEY , params) ?
443
+ } ,
444
+ }
445
+ } ,
446
+ LSPSMessage :: LSPS5 ( LSPS5Message :: Response ( request_id, response) ) => {
447
+ jsonrpc_object. serialize_field ( JSONRPC_ID_FIELD_KEY , & request_id. 0 ) ?;
448
+
449
+ match response {
450
+ LSPS5Response :: SetWebhook ( result) => {
451
+ jsonrpc_object. serialize_field ( JSONRPC_RESULT_FIELD_KEY , result) ?
452
+ } ,
453
+ LSPS5Response :: SetWebhookError ( error) => {
454
+ jsonrpc_object. serialize_field ( JSONRPC_ERROR_FIELD_KEY , error) ?
455
+ } ,
456
+ LSPS5Response :: ListWebhooks ( result) => {
457
+ jsonrpc_object. serialize_field ( JSONRPC_RESULT_FIELD_KEY , result) ?
458
+ } ,
459
+ LSPS5Response :: ListWebhooksError ( error) => {
460
+ jsonrpc_object. serialize_field ( JSONRPC_ERROR_FIELD_KEY , error) ?
461
+ } ,
462
+ LSPS5Response :: RemoveWebhook ( result) => {
463
+ jsonrpc_object. serialize_field ( JSONRPC_RESULT_FIELD_KEY , result) ?
464
+ } ,
465
+ LSPS5Response :: RemoveWebhookError ( error) => {
466
+ jsonrpc_object. serialize_field ( JSONRPC_ERROR_FIELD_KEY , error) ?
467
+ } ,
468
+ }
469
+ } ,
398
470
}
399
471
400
472
jsonrpc_object. end ( )
@@ -508,6 +580,31 @@ impl<'de, 'a> Visitor<'de> for LSPSMessageVisitor<'a> {
508
580
. map_err ( de:: Error :: custom) ?;
509
581
Ok ( LSPSMessage :: LSPS2 ( LSPS2Message :: Request ( id, LSPS2Request :: Buy ( request) ) ) )
510
582
} ,
583
+ // Add LSPS5 methods
584
+ LSPSMethod :: LSPS5SetWebhook => {
585
+ let request = serde_json:: from_value ( params. unwrap_or ( json ! ( { } ) ) )
586
+ . map_err ( de:: Error :: custom) ?;
587
+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Request (
588
+ id,
589
+ LSPS5Request :: SetWebhook ( request) ,
590
+ ) ) )
591
+ } ,
592
+ LSPSMethod :: LSPS5ListWebhooks => {
593
+ let request = serde_json:: from_value ( params. unwrap_or ( json ! ( { } ) ) )
594
+ . map_err ( de:: Error :: custom) ?;
595
+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Request (
596
+ id,
597
+ LSPS5Request :: ListWebhooks ( request) ,
598
+ ) ) )
599
+ } ,
600
+ LSPSMethod :: LSPS5RemoveWebhook => {
601
+ let request = serde_json:: from_value ( params. unwrap_or ( json ! ( { } ) ) )
602
+ . map_err ( de:: Error :: custom) ?;
603
+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Request (
604
+ id,
605
+ LSPS5Request :: RemoveWebhook ( request) ,
606
+ ) ) )
607
+ } ,
511
608
} ,
512
609
None => match self . request_id_to_method_map . remove ( & id) {
513
610
Some ( method) => match method {
@@ -613,6 +710,58 @@ impl<'de, 'a> Visitor<'de> for LSPSMessageVisitor<'a> {
613
710
Err ( de:: Error :: custom ( "Received invalid JSON-RPC object: one of method, result, or error required" ) )
614
711
}
615
712
} ,
713
+ // Add LSPS5 methods
714
+ LSPSMethod :: LSPS5SetWebhook => {
715
+ if let Some ( error) = error {
716
+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
717
+ id,
718
+ LSPS5Response :: SetWebhookError ( error) ,
719
+ ) ) )
720
+ } else if let Some ( result) = result {
721
+ let response =
722
+ serde_json:: from_value ( result) . map_err ( de:: Error :: custom) ?;
723
+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
724
+ id,
725
+ LSPS5Response :: SetWebhook ( response) ,
726
+ ) ) )
727
+ } else {
728
+ Err ( de:: Error :: custom ( "Received invalid JSON-RPC object: one of method, result, or error required" ) )
729
+ }
730
+ } ,
731
+ LSPSMethod :: LSPS5ListWebhooks => {
732
+ if let Some ( error) = error {
733
+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
734
+ id,
735
+ LSPS5Response :: ListWebhooksError ( error) ,
736
+ ) ) )
737
+ } else if let Some ( result) = result {
738
+ let response =
739
+ serde_json:: from_value ( result) . map_err ( de:: Error :: custom) ?;
740
+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
741
+ id,
742
+ LSPS5Response :: ListWebhooks ( response) ,
743
+ ) ) )
744
+ } else {
745
+ Err ( de:: Error :: custom ( "Received invalid JSON-RPC object: one of method, result, or error required" ) )
746
+ }
747
+ } ,
748
+ LSPSMethod :: LSPS5RemoveWebhook => {
749
+ if let Some ( error) = error {
750
+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
751
+ id,
752
+ LSPS5Response :: RemoveWebhookError ( error) ,
753
+ ) ) )
754
+ } else if let Some ( result) = result {
755
+ let response =
756
+ serde_json:: from_value ( result) . map_err ( de:: Error :: custom) ?;
757
+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
758
+ id,
759
+ LSPS5Response :: RemoveWebhook ( response) ,
760
+ ) ) )
761
+ } else {
762
+ Err ( de:: Error :: custom ( "Received invalid JSON-RPC object: one of method, result, or error required" ) )
763
+ }
764
+ } ,
616
765
} ,
617
766
None => Err ( de:: Error :: custom ( format ! (
618
767
"Received response for unknown request id: {}" ,
0 commit comments