@@ -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 chrono:: DateTime ;
@@ -60,6 +64,9 @@ pub(crate) enum LSPSMethod {
60
64
LSPS1CreateOrder ,
61
65
LSPS2GetInfo ,
62
66
LSPS2Buy ,
67
+ LSPS5SetWebhook ,
68
+ LSPS5ListWebhooks ,
69
+ LSPS5RemoveWebhook ,
63
70
}
64
71
65
72
impl LSPSMethod {
@@ -71,6 +78,9 @@ impl LSPSMethod {
71
78
Self :: LSPS1GetOrder => LSPS1_GET_ORDER_METHOD_NAME ,
72
79
Self :: LSPS2GetInfo => LSPS2_GET_INFO_METHOD_NAME ,
73
80
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 ,
74
84
}
75
85
}
76
86
}
@@ -85,6 +95,9 @@ impl FromStr for LSPSMethod {
85
95
LSPS1_GET_ORDER_METHOD_NAME => Ok ( Self :: LSPS1GetOrder ) ,
86
96
LSPS2_GET_INFO_METHOD_NAME => Ok ( Self :: LSPS2GetInfo ) ,
87
97
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 ) ,
88
101
_ => Err ( & "Unknown method name" ) ,
89
102
}
90
103
}
@@ -117,6 +130,16 @@ impl From<&LSPS2Request> for LSPSMethod {
117
130
}
118
131
}
119
132
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
+
120
143
impl < ' de > Deserialize < ' de > for LSPSMethod {
121
144
fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
122
145
where
@@ -265,6 +288,8 @@ pub enum LSPSMessage {
265
288
LSPS1 ( LSPS1Message ) ,
266
289
/// An LSPS2 message.
267
290
LSPS2 ( LSPS2Message ) ,
291
+ /// An LSPS5 message.
292
+ LSPS5 ( LSPS5Message ) ,
268
293
}
269
294
270
295
impl LSPSMessage {
@@ -292,6 +317,10 @@ impl LSPSMessage {
292
317
LSPSMessage :: LSPS2 ( LSPS2Message :: Request ( request_id, request) ) => {
293
318
Some ( ( LSPSRequestId ( request_id. 0 . clone ( ) ) , request. into ( ) ) )
294
319
} ,
320
+ // Add LSPS5
321
+ LSPSMessage :: LSPS5 ( LSPS5Message :: Request ( request_id, request) ) => {
322
+ Some ( ( LSPSRequestId ( request_id. 0 . clone ( ) ) , request. into ( ) ) )
323
+ } ,
295
324
_ => None ,
296
325
}
297
326
}
@@ -408,6 +437,47 @@ impl Serialize for LSPSMessage {
408
437
jsonrpc_object. serialize_field ( JSONRPC_ID_FIELD_KEY , & serde_json:: Value :: Null ) ?;
409
438
jsonrpc_object. serialize_field ( JSONRPC_ERROR_FIELD_KEY , & error) ?;
410
439
} ,
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
+ } ,
411
481
}
412
482
413
483
jsonrpc_object. end ( )
@@ -521,6 +591,31 @@ impl<'de, 'a> Visitor<'de> for LSPSMessageVisitor<'a> {
521
591
. map_err ( de:: Error :: custom) ?;
522
592
Ok ( LSPSMessage :: LSPS2 ( LSPS2Message :: Request ( id, LSPS2Request :: Buy ( request) ) ) )
523
593
} ,
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
+ } ,
524
619
} ,
525
620
None => match self . request_id_to_method_map . remove ( & id) {
526
621
Some ( method) => match method {
@@ -626,6 +721,58 @@ impl<'de, 'a> Visitor<'de> for LSPSMessageVisitor<'a> {
626
721
Err ( de:: Error :: custom ( "Received invalid JSON-RPC object: one of method, result, or error required" ) )
627
722
}
628
723
} ,
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
+ } ,
629
776
} ,
630
777
None => Err ( de:: Error :: custom ( format ! (
631
778
"Received response for unknown request id: {}" ,
0 commit comments