@@ -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,9 @@ 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
+ 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 ) ,
86
99
_ => Err ( & "Unknown method name" ) ,
87
100
}
88
101
}
@@ -115,6 +128,16 @@ impl From<&LSPS2Request> for LSPSMethod {
115
128
}
116
129
}
117
130
131
+ impl From < & LSPS5Request > for LSPSMethod {
132
+ fn from ( value : & LSPS5Request ) -> Self {
133
+ match value {
134
+ LSPS5Request :: SetWebhook ( _) => Self :: LSPS5SetWebhook ,
135
+ LSPS5Request :: ListWebhooks ( _) => Self :: LSPS5ListWebhooks ,
136
+ LSPS5Request :: RemoveWebhook ( _) => Self :: LSPS5RemoveWebhook ,
137
+ }
138
+ }
139
+ }
140
+
118
141
impl < ' de > Deserialize < ' de > for LSPSMethod {
119
142
fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
120
143
where
@@ -252,6 +275,8 @@ pub enum LSPSMessage {
252
275
LSPS1 ( LSPS1Message ) ,
253
276
/// An LSPS2 message.
254
277
LSPS2 ( LSPS2Message ) ,
278
+ /// An LSPS5 message.
279
+ LSPS5 ( LSPS5Message ) ,
255
280
}
256
281
257
282
impl LSPSMessage {
@@ -279,6 +304,10 @@ impl LSPSMessage {
279
304
LSPSMessage :: LSPS2 ( LSPS2Message :: Request ( request_id, request) ) => {
280
305
Some ( ( LSPSRequestId ( request_id. 0 . clone ( ) ) , request. into ( ) ) )
281
306
} ,
307
+ // Add LSPS5
308
+ LSPSMessage :: LSPS5 ( LSPS5Message :: Request ( request_id, request) ) => {
309
+ Some ( ( LSPSRequestId ( request_id. 0 . clone ( ) ) , request. into ( ) ) )
310
+ } ,
282
311
_ => None ,
283
312
}
284
313
}
@@ -395,6 +424,47 @@ impl Serialize for LSPSMessage {
395
424
jsonrpc_object. serialize_field ( JSONRPC_ID_FIELD_KEY , & serde_json:: Value :: Null ) ?;
396
425
jsonrpc_object. serialize_field ( JSONRPC_ERROR_FIELD_KEY , & error) ?;
397
426
} ,
427
+ LSPSMessage :: LSPS5 ( LSPS5Message :: Request ( request_id, request) ) => {
428
+ jsonrpc_object. serialize_field ( JSONRPC_ID_FIELD_KEY , & request_id. 0 ) ?;
429
+ jsonrpc_object
430
+ . serialize_field ( JSONRPC_METHOD_FIELD_KEY , & LSPSMethod :: from ( request) ) ?;
431
+
432
+ match request {
433
+ LSPS5Request :: SetWebhook ( params) => {
434
+ jsonrpc_object. serialize_field ( JSONRPC_PARAMS_FIELD_KEY , params) ?
435
+ } ,
436
+ LSPS5Request :: ListWebhooks ( params) => {
437
+ jsonrpc_object. serialize_field ( JSONRPC_PARAMS_FIELD_KEY , params) ?
438
+ } ,
439
+ LSPS5Request :: RemoveWebhook ( params) => {
440
+ jsonrpc_object. serialize_field ( JSONRPC_PARAMS_FIELD_KEY , params) ?
441
+ } ,
442
+ }
443
+ } ,
444
+ LSPSMessage :: LSPS5 ( LSPS5Message :: Response ( request_id, response) ) => {
445
+ jsonrpc_object. serialize_field ( JSONRPC_ID_FIELD_KEY , & request_id. 0 ) ?;
446
+
447
+ match response {
448
+ LSPS5Response :: SetWebhook ( result) => {
449
+ jsonrpc_object. serialize_field ( JSONRPC_RESULT_FIELD_KEY , result) ?
450
+ } ,
451
+ LSPS5Response :: SetWebhookError ( error) => {
452
+ jsonrpc_object. serialize_field ( JSONRPC_ERROR_FIELD_KEY , error) ?
453
+ } ,
454
+ LSPS5Response :: ListWebhooks ( result) => {
455
+ jsonrpc_object. serialize_field ( JSONRPC_RESULT_FIELD_KEY , result) ?
456
+ } ,
457
+ LSPS5Response :: ListWebhooksError ( error) => {
458
+ jsonrpc_object. serialize_field ( JSONRPC_ERROR_FIELD_KEY , error) ?
459
+ } ,
460
+ LSPS5Response :: RemoveWebhook ( result) => {
461
+ jsonrpc_object. serialize_field ( JSONRPC_RESULT_FIELD_KEY , result) ?
462
+ } ,
463
+ LSPS5Response :: RemoveWebhookError ( error) => {
464
+ jsonrpc_object. serialize_field ( JSONRPC_ERROR_FIELD_KEY , error) ?
465
+ } ,
466
+ }
467
+ } ,
398
468
}
399
469
400
470
jsonrpc_object. end ( )
@@ -508,6 +578,31 @@ impl<'de, 'a> Visitor<'de> for LSPSMessageVisitor<'a> {
508
578
. map_err ( de:: Error :: custom) ?;
509
579
Ok ( LSPSMessage :: LSPS2 ( LSPS2Message :: Request ( id, LSPS2Request :: Buy ( request) ) ) )
510
580
} ,
581
+ // Add LSPS5 methods
582
+ LSPSMethod :: LSPS5SetWebhook => {
583
+ let request = serde_json:: from_value ( params. unwrap_or ( json ! ( { } ) ) )
584
+ . map_err ( de:: Error :: custom) ?;
585
+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Request (
586
+ id,
587
+ LSPS5Request :: SetWebhook ( request) ,
588
+ ) ) )
589
+ } ,
590
+ LSPSMethod :: LSPS5ListWebhooks => {
591
+ let request = serde_json:: from_value ( params. unwrap_or ( json ! ( { } ) ) )
592
+ . map_err ( de:: Error :: custom) ?;
593
+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Request (
594
+ id,
595
+ LSPS5Request :: ListWebhooks ( request) ,
596
+ ) ) )
597
+ } ,
598
+ LSPSMethod :: LSPS5RemoveWebhook => {
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 :: RemoveWebhook ( request) ,
604
+ ) ) )
605
+ } ,
511
606
} ,
512
607
None => match self . request_id_to_method_map . remove ( & id) {
513
608
Some ( method) => match method {
@@ -613,6 +708,58 @@ impl<'de, 'a> Visitor<'de> for LSPSMessageVisitor<'a> {
613
708
Err ( de:: Error :: custom ( "Received invalid JSON-RPC object: one of method, result, or error required" ) )
614
709
}
615
710
} ,
711
+ // Add LSPS5 methods
712
+ LSPSMethod :: LSPS5SetWebhook => {
713
+ if let Some ( error) = error {
714
+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
715
+ id,
716
+ LSPS5Response :: SetWebhookError ( error) ,
717
+ ) ) )
718
+ } else if let Some ( result) = result {
719
+ let response =
720
+ serde_json:: from_value ( result) . map_err ( de:: Error :: custom) ?;
721
+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
722
+ id,
723
+ LSPS5Response :: SetWebhook ( response) ,
724
+ ) ) )
725
+ } else {
726
+ Err ( de:: Error :: custom ( "Received invalid JSON-RPC object: one of method, result, or error required" ) )
727
+ }
728
+ } ,
729
+ LSPSMethod :: LSPS5ListWebhooks => {
730
+ if let Some ( error) = error {
731
+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
732
+ id,
733
+ LSPS5Response :: ListWebhooksError ( error) ,
734
+ ) ) )
735
+ } else if let Some ( result) = result {
736
+ let response =
737
+ serde_json:: from_value ( result) . map_err ( de:: Error :: custom) ?;
738
+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
739
+ id,
740
+ LSPS5Response :: ListWebhooks ( response) ,
741
+ ) ) )
742
+ } else {
743
+ Err ( de:: Error :: custom ( "Received invalid JSON-RPC object: one of method, result, or error required" ) )
744
+ }
745
+ } ,
746
+ LSPSMethod :: LSPS5RemoveWebhook => {
747
+ if let Some ( error) = error {
748
+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
749
+ id,
750
+ LSPS5Response :: RemoveWebhookError ( error) ,
751
+ ) ) )
752
+ } else if let Some ( result) = result {
753
+ let response =
754
+ serde_json:: from_value ( result) . map_err ( de:: Error :: custom) ?;
755
+ Ok ( LSPSMessage :: LSPS5 ( LSPS5Message :: Response (
756
+ id,
757
+ LSPS5Response :: RemoveWebhook ( response) ,
758
+ ) ) )
759
+ } else {
760
+ Err ( de:: Error :: custom ( "Received invalid JSON-RPC object: one of method, result, or error required" ) )
761
+ }
762
+ } ,
616
763
} ,
617
764
None => Err ( de:: Error :: custom ( format ! (
618
765
"Received response for unknown request id: {}" ,
0 commit comments