@@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize};
2
2
use std:: fmt:: Display ;
3
3
use thiserror:: Error ;
4
4
5
- use crate :: MagicId ;
5
+ use crate :: { MagicId , StdResult } ;
6
6
7
7
const MAINNET_MAGIC_ID : MagicId = 764824073 ;
8
8
const TESTNET_MAGIC_ID : MagicId = 1097911063 ;
@@ -74,6 +74,18 @@ impl CardanoNetwork {
74
74
CardanoNetwork :: TestNet ( magic_id) => magic_id,
75
75
}
76
76
}
77
+
78
+ /// Evaluate the possibility of validating the request to allow unparsable block or not,
79
+ /// depending on the target Cardano network
80
+ pub fn allow_unparsable_block ( & self , allow_unparsable_block : bool ) -> StdResult < bool > {
81
+ let allow_unparsable_block = match self {
82
+ CardanoNetwork :: MainNet => false ,
83
+ CardanoNetwork :: TestNet ( id) if * id == PREPROD_MAGIC_ID => false ,
84
+ _ => allow_unparsable_block,
85
+ } ;
86
+
87
+ Ok ( allow_unparsable_block)
88
+ }
77
89
}
78
90
79
91
impl Display for CardanoNetwork {
@@ -144,4 +156,71 @@ mod tests {
144
156
) ;
145
157
assert ! ( CardanoNetwork :: from_code( "private" . to_string( ) , None ) . is_err( ) ) ;
146
158
}
159
+
160
+ #[ test]
161
+ fn allow_unparsable_block_should_always_return_false_on_mainnet_and_preprod ( ) {
162
+ let allow_unparsable_block = CardanoNetwork :: MainNet
163
+ . allow_unparsable_block ( false )
164
+ . unwrap ( ) ;
165
+ assert ! ( !allow_unparsable_block) ;
166
+
167
+ let allow_unparsable_block = CardanoNetwork :: MainNet
168
+ . allow_unparsable_block ( true )
169
+ . unwrap ( ) ;
170
+ assert ! ( !allow_unparsable_block) ;
171
+
172
+ let allow_unparsable_block = CardanoNetwork :: TestNet ( PREPROD_MAGIC_ID )
173
+ . allow_unparsable_block ( false )
174
+ . unwrap ( ) ;
175
+ assert ! ( !allow_unparsable_block) ;
176
+
177
+ let allow_unparsable_block = CardanoNetwork :: TestNet ( PREPROD_MAGIC_ID )
178
+ . allow_unparsable_block ( true )
179
+ . unwrap ( ) ;
180
+ assert ! ( !allow_unparsable_block) ;
181
+ }
182
+
183
+ #[ test]
184
+ fn allow_unparsable_block_should_return_value_passed_in_parameter_on_all_networks_other_than_mainnet_and_preprod (
185
+ ) {
186
+ let allow_unparsable_block = CardanoNetwork :: TestNet ( PREVIEW_MAGIC_ID )
187
+ . allow_unparsable_block ( false )
188
+ . unwrap ( ) ;
189
+ assert ! ( !allow_unparsable_block) ;
190
+
191
+ let allow_unparsable_block = CardanoNetwork :: TestNet ( PREVIEW_MAGIC_ID )
192
+ . allow_unparsable_block ( true )
193
+ . unwrap ( ) ;
194
+ assert ! ( allow_unparsable_block) ;
195
+
196
+ let allow_unparsable_block = CardanoNetwork :: TestNet ( SANCHONET_MAGIC_ID )
197
+ . allow_unparsable_block ( false )
198
+ . unwrap ( ) ;
199
+ assert ! ( !allow_unparsable_block) ;
200
+
201
+ let allow_unparsable_block = CardanoNetwork :: TestNet ( SANCHONET_MAGIC_ID )
202
+ . allow_unparsable_block ( true )
203
+ . unwrap ( ) ;
204
+ assert ! ( allow_unparsable_block) ;
205
+
206
+ let allow_unparsable_block = CardanoNetwork :: TestNet ( TESTNET_MAGIC_ID )
207
+ . allow_unparsable_block ( false )
208
+ . unwrap ( ) ;
209
+ assert ! ( !allow_unparsable_block) ;
210
+
211
+ let allow_unparsable_block = CardanoNetwork :: TestNet ( TESTNET_MAGIC_ID )
212
+ . allow_unparsable_block ( true )
213
+ . unwrap ( ) ;
214
+ assert ! ( allow_unparsable_block) ;
215
+
216
+ let allow_unparsable_block = CardanoNetwork :: DevNet ( 123 )
217
+ . allow_unparsable_block ( false )
218
+ . unwrap ( ) ;
219
+ assert ! ( !allow_unparsable_block) ;
220
+
221
+ let allow_unparsable_block = CardanoNetwork :: DevNet ( 123 )
222
+ . allow_unparsable_block ( true )
223
+ . unwrap ( ) ;
224
+ assert ! ( allow_unparsable_block) ;
225
+ }
147
226
}
0 commit comments