@@ -16,6 +16,9 @@ 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 , LSPS5_REMOVE_WEBHOOK_METHOD_NAME , LSPS5_SET_WEBHOOK_METHOD_NAME
21
+ } ;
19
22
use crate :: prelude:: { HashMap , String } ;
20
23
21
24
use lightning:: ln:: msgs:: LightningError ;
@@ -58,6 +61,9 @@ pub(crate) enum LSPSMethod {
58
61
LSPS1CreateOrder ,
59
62
LSPS2GetInfo ,
60
63
LSPS2Buy ,
64
+ LSPS5SetWebhook ,
65
+ LSPS5ListWebhooks ,
66
+ LSPS5RemoveWebhook ,
61
67
}
62
68
63
69
impl LSPSMethod {
@@ -69,6 +75,9 @@ impl LSPSMethod {
69
75
Self :: LSPS1GetOrder => LSPS1_GET_ORDER_METHOD_NAME ,
70
76
Self :: LSPS2GetInfo => LSPS2_GET_INFO_METHOD_NAME ,
71
77
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 ,
72
81
}
73
82
}
74
83
}
@@ -83,6 +92,10 @@ impl FromStr for LSPSMethod {
83
92
LSPS1_GET_ORDER_METHOD_NAME => Ok ( Self :: LSPS1GetOrder ) ,
84
93
LSPS2_GET_INFO_METHOD_NAME => Ok ( Self :: LSPS2GetInfo ) ,
85
94
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 ) ,
86
99
_ => Err ( & "Unknown method name" ) ,
87
100
}
88
101
}
@@ -115,6 +128,17 @@ impl From<&LSPS2Request> for LSPSMethod {
115
128
}
116
129
}
117
130
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
+
118
142
impl < ' de > Deserialize < ' de > for LSPSMethod {
119
143
fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
120
144
where
@@ -252,6 +276,8 @@ pub enum LSPSMessage {
252
276
LSPS1 ( LSPS1Message ) ,
253
277
/// An LSPS2 message.
254
278
LSPS2 ( LSPS2Message ) ,
279
+ /// An LSPS5 message.
280
+ LSPS5 ( LSPS5Message ) ,
255
281
}
256
282
257
283
impl LSPSMessage {
@@ -279,6 +305,10 @@ impl LSPSMessage {
279
305
LSPSMessage :: LSPS2 ( LSPS2Message :: Request ( request_id, request) ) => {
280
306
Some ( ( LSPSRequestId ( request_id. 0 . clone ( ) ) , request. into ( ) ) )
281
307
} ,
308
+ // Add LSPS5
309
+ LSPSMessage :: LSPS5 ( LSPS5Message :: Request ( request_id, request) ) => {
310
+ Some ( ( LSPSRequestId ( request_id. 0 . clone ( ) ) , request. into ( ) ) )
311
+ } ,
282
312
_ => None ,
283
313
}
284
314
}
@@ -395,6 +425,47 @@ impl Serialize for LSPSMessage {
395
425
jsonrpc_object. serialize_field ( JSONRPC_ID_FIELD_KEY , & serde_json:: Value :: Null ) ?;
396
426
jsonrpc_object. serialize_field ( JSONRPC_ERROR_FIELD_KEY , & error) ?;
397
427
} ,
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
+ } ,
398
469
}
399
470
400
471
jsonrpc_object. end ( )
@@ -508,6 +579,31 @@ impl<'de, 'a> Visitor<'de> for LSPSMessageVisitor<'a> {
508
579
. map_err ( de:: Error :: custom) ?;
509
580
Ok ( LSPSMessage :: LSPS2 ( LSPS2Message :: Request ( id, LSPS2Request :: Buy ( request) ) ) )
510
581
} ,
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
+ } ,
511
607
} ,
512
608
None => match self . request_id_to_method_map . remove ( & id) {
513
609
Some ( method) => match method {
@@ -613,6 +709,58 @@ impl<'de, 'a> Visitor<'de> for LSPSMessageVisitor<'a> {
613
709
Err ( de:: Error :: custom ( "Received invalid JSON-RPC object: one of method, result, or error required" ) )
614
710
}
615
711
} ,
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
+ } ,
616
764
} ,
617
765
None => Err ( de:: Error :: custom ( format ! (
618
766
"Received response for unknown request id: {}" ,
0 commit comments