@@ -22,6 +22,8 @@ use ws::{CloseCode, Handler, Handshake, Message, Result, Sender};
22
22
#[ derive( Debug , PartialEq ) ]
23
23
pub enum XtStatus {
24
24
Finalized ,
25
+ InBlock ,
26
+ Broadcast ,
25
27
Ready ,
26
28
Future ,
27
29
Error ,
@@ -85,6 +87,41 @@ pub fn on_subscription_msg(msg: Message, _out: Sender, result: ThreadOut<String>
85
87
Ok ( ( ) )
86
88
}
87
89
90
+ pub fn on_extrinsic_msg_until_in_block (
91
+ msg : Message ,
92
+ out : Sender ,
93
+ result : ThreadOut < String > ,
94
+ ) -> Result < ( ) > {
95
+ let retstr = msg. as_text ( ) . unwrap ( ) ;
96
+ debug ! ( "got msg {}" , retstr) ;
97
+ match parse_status ( retstr) {
98
+ ( XtStatus :: Finalized , val) => end_process ( out, result, val) ,
99
+ ( XtStatus :: InBlock , val) => end_process ( out, result, val) ,
100
+ ( XtStatus :: Future , _) => end_process ( out, result, None ) ,
101
+ ( XtStatus :: Error , e) => end_process ( out, result, e) ,
102
+ _ => ( ) ,
103
+ } ;
104
+ Ok ( ( ) )
105
+ }
106
+
107
+
108
+ pub fn on_extrinsic_msg_until_broadcast (
109
+ msg : Message ,
110
+ out : Sender ,
111
+ result : ThreadOut < String > ,
112
+ ) -> Result < ( ) > {
113
+ let retstr = msg. as_text ( ) . unwrap ( ) ;
114
+ debug ! ( "got msg {}" , retstr) ;
115
+ match parse_status ( retstr) {
116
+ ( XtStatus :: Finalized , val) => end_process ( out, result, val) ,
117
+ ( XtStatus :: Broadcast , _) => end_process ( out, result, None ) ,
118
+ ( XtStatus :: Future , _) => end_process ( out, result, None ) ,
119
+ ( XtStatus :: Error , e) => end_process ( out, result, e) ,
120
+ _ => ( ) ,
121
+ } ;
122
+ Ok ( ( ) )
123
+ }
124
+
88
125
pub fn on_extrinsic_msg_until_finalized (
89
126
msg : Message ,
90
127
out : Sender ,
@@ -114,6 +151,8 @@ pub fn on_extrinsic_msg_until_ready(
114
151
match parse_status ( retstr) {
115
152
( XtStatus :: Finalized , val) => end_process ( out, result, val) ,
116
153
( XtStatus :: Ready , _) => end_process ( out, result, None ) ,
154
+ ( XtStatus :: InBlock , _) => end_process ( out, result, None ) ,
155
+ ( XtStatus :: Broadcast , _) => end_process ( out, result, None ) ,
117
156
( XtStatus :: Future , _) => end_process ( out, result, None ) ,
118
157
( XtStatus :: Error , e) => end_process ( out, result, e) ,
119
158
_ => ( ) ,
@@ -150,7 +189,16 @@ fn parse_status(msg: &str) -> (XtStatus, Option<String>) {
150
189
if let Some ( hash) = obj. get ( "finalized" ) {
151
190
info ! ( "finalized: {:?}" , hash) ;
152
191
( XtStatus :: Finalized , Some ( hash. to_string ( ) ) )
153
- } else {
192
+ }
193
+ else if let Some ( hash) = obj. get ( "inBlock" ) {
194
+ info ! ( "inBlock: {:?}" , hash) ;
195
+ ( XtStatus :: InBlock , Some ( hash. to_string ( ) ) )
196
+ }
197
+ else if let Some ( hash) = obj. get ( "broadcast" ) {
198
+ info ! ( "Broadcast: {:?}" , array) ;
199
+ ( XtStatus :: Broadcast , Some ( array. to_string ( ) ) )
200
+ }
201
+ else {
154
202
( XtStatus :: Unknown , None )
155
203
}
156
204
}
@@ -188,6 +236,29 @@ mod tests {
188
236
)
189
237
) ;
190
238
239
+ let msg = "{\" jsonrpc\" :\" 2.0\" ,\" method\" :\" author_extrinsicUpdate\" ,\" params\" :{\" result\" :{\" broadcast\" :[\" QmfSF4VYWNqNf5KYHpDEdY8Rt1nPUgSkMweDkYzhSWirGY\" ,\" Qmchhx9SRFeNvqjUK4ZVQ9jH4zhARFkutf9KhbbAmZWBLx\" ,\" QmQJAqr98EF1X3YfjVKNwQUG9RryqX4Hv33RqGChbz3Ncg\" ]},\" subscription\" :232}}" ;
240
+ assert_eq ! ( parse_status( msg) , ( XtStatus :: Broadcast , None ) ) ; assert_eq ! (
241
+ parse_status( msg) , (
242
+ XtStatus :: Broadcast ,
243
+ Some (
244
+ "[\" QmfSF4VYWNqNf5KYHpDEdY8Rt1nPUgSkMweDkYzhSWirGY\" ,\" Qmchhx9SRFeNvqjUK4ZVQ9jH4zhARFkutf9KhbbAmZWBLx\" ,\" QmQJAqr98EF1X3YfjVKNwQUG9RryqX4Hv33RqGChbz3Ncg\" ]"
245
+ . to_string( )
246
+ )
247
+ )
248
+ ) ;
249
+
250
+ let msg = "{\" jsonrpc\" :\" 2.0\" ,\" method\" :\" author_extrinsicUpdate\" ,\" params\" :{\" result\" :{\" inBlock\" :\" 0x3104d362365ff5ddb61845e1de441b56c6722e94c1aee362f8aa8ba75bd7a3aa\" },\" subscription\" :232}}" ;
251
+ assert_eq ! (
252
+ parse_status( msg) , (
253
+ XtStatus :: InBlock ,
254
+ Some (
255
+ "\" 0x3104d362365ff5ddb61845e1de441b56c6722e94c1aee362f8aa8ba75bd7a3aa\" "
256
+ . to_string( )
257
+ )
258
+ )
259
+ ) ;
260
+
261
+
191
262
let msg = "{\" jsonrpc\" :\" 2.0\" ,\" method\" :\" author_extrinsicUpdate\" ,\" params\" :{\" result\" :\" future\" ,\" subscription\" :2}}" ;
192
263
assert_eq ! ( parse_status( msg) , ( XtStatus :: Future , None ) ) ;
193
264
0 commit comments