@@ -13,7 +13,7 @@ pub type FileContent = String;
13
13
/// List items are just their corresponding file content loaded in memory.
14
14
/// Individual items are btreemap with the source filename as key and the file content as value.
15
15
#[ derive( Debug , Default ) ]
16
- pub struct DataFolder {
16
+ pub struct FakeAggregatorData {
17
17
epoch_settings : FileContent ,
18
18
19
19
certificates_list : FileContent ,
@@ -30,14 +30,14 @@ pub struct DataFolder {
30
30
ctx_proofs : BTreeMap < ArtifactId , FileContent > ,
31
31
}
32
32
33
- impl DataFolder {
33
+ impl FakeAggregatorData {
34
34
pub fn load_from_folder ( folder : & Path ) -> Self {
35
35
fn extract_artifact_id ( filename : & str , prefix : & str ) -> String {
36
36
let id_with_extension = filename. strip_prefix ( prefix) . unwrap ( ) ;
37
37
id_with_extension. strip_suffix ( ".json" ) . unwrap ( ) . to_string ( )
38
38
}
39
39
40
- let mut data_folder = DataFolder :: default ( ) ;
40
+ let mut data = FakeAggregatorData :: default ( ) ;
41
41
42
42
for entry in list_json_files_in_folder ( folder) {
43
43
let filename = entry. file_name ( ) . to_string_lossy ( ) . to_string ( ) ;
@@ -50,94 +50,130 @@ impl DataFolder {
50
50
51
51
match filename. as_str ( ) {
52
52
"epoch-settings.json" => {
53
- data_folder . epoch_settings = file_content;
53
+ data . epoch_settings = file_content;
54
54
}
55
55
"mithril-stake-distributions.json" => {
56
- data_folder . msds_list = file_content;
56
+ data . msds_list = file_content;
57
57
}
58
58
"snapshots.json" => {
59
- data_folder . snapshots_list = file_content;
59
+ data . snapshots_list = file_content;
60
60
}
61
61
"certificates.json" => {
62
- data_folder . certificates_list = file_content;
62
+ data . certificates_list = file_content;
63
63
}
64
64
"ctx-commitments.json" => {
65
- data_folder . ctx_commitments_list = file_content;
65
+ data . ctx_commitments_list = file_content;
66
66
}
67
67
_ if filename. starts_with ( "mithril-stake-distribution-" ) => {
68
- data_folder . individual_msds . insert (
68
+ data . individual_msds . insert (
69
69
extract_artifact_id ( & filename, "mithril-stake-distribution-" ) ,
70
70
file_content,
71
71
) ;
72
72
}
73
73
_ if filename. starts_with ( "snapshot-" ) => {
74
- data_folder
75
- . individual_snapshots
74
+ data. individual_snapshots
76
75
. insert ( extract_artifact_id ( & filename, "snapshot-" ) , file_content) ;
77
76
}
78
77
_ if filename. starts_with ( "certificate-" ) => {
79
- data_folder
80
- . individual_certificates
78
+ data. individual_certificates
81
79
. insert ( extract_artifact_id ( & filename, "certificate-" ) , file_content) ;
82
80
}
83
81
_ if filename. starts_with ( "ctx-commitment-" ) => {
84
- data_folder . individual_ctx_commitments . insert (
82
+ data . individual_ctx_commitments . insert (
85
83
extract_artifact_id ( & filename, "ctx-commitment-" ) ,
86
84
file_content,
87
85
) ;
88
86
}
89
87
_ if filename. starts_with ( "ctx-proof-" ) => {
90
- data_folder
91
- . ctx_proofs
88
+ data. ctx_proofs
92
89
. insert ( extract_artifact_id ( & filename, "ctx-proof-" ) , file_content) ;
93
90
}
94
91
// unknown file
95
92
_ => { }
96
93
}
97
94
}
98
95
99
- data_folder
96
+ data
100
97
}
101
98
102
- pub fn generate_code_for_all_data ( self ) -> String {
103
- format ! (
104
- "use std::collections::BTreeMap;
99
+ pub fn generate_code_for_ids ( self ) -> String {
100
+ Self :: assemble_code (
101
+ & [
102
+ generate_ids_array (
103
+ "snapshot_digests" ,
104
+ BTreeSet :: from_iter ( self . individual_snapshots . keys ( ) . cloned ( ) ) ,
105
+ ) ,
106
+ generate_ids_array (
107
+ "msd_hashes" ,
108
+ BTreeSet :: from_iter ( self . individual_msds . keys ( ) . cloned ( ) ) ,
109
+ ) ,
110
+ generate_ids_array (
111
+ "certificate_hashes" ,
112
+ BTreeSet :: from_iter ( self . individual_certificates . keys ( ) . cloned ( ) ) ,
113
+ ) ,
114
+ generate_ids_array (
115
+ "ctx_commitment_hashes" ,
116
+ BTreeSet :: from_iter ( self . individual_ctx_commitments . keys ( ) . cloned ( ) ) ,
117
+ ) ,
118
+ generate_ids_array (
119
+ "proof_transaction_hashes" ,
120
+ BTreeSet :: from_iter ( self . ctx_proofs . keys ( ) . cloned ( ) ) ,
121
+ ) ,
122
+ ] ,
123
+ false ,
124
+ )
125
+ }
105
126
106
- {}
107
- " ,
108
- [
127
+ pub fn generate_code_for_all_data ( self ) -> String {
128
+ Self :: assemble_code (
129
+ & [
109
130
generate_list_getter ( "epoch_settings" , self . epoch_settings ) ,
110
131
generate_ids_array (
111
132
"snapshot_digests" ,
112
- BTreeSet :: from_iter( self . individual_snapshots. keys( ) . cloned( ) )
133
+ BTreeSet :: from_iter ( self . individual_snapshots . keys ( ) . cloned ( ) ) ,
113
134
) ,
114
135
generate_artifact_getter ( "snapshots" , self . individual_snapshots ) ,
115
136
generate_list_getter ( "snapshot_list" , self . snapshots_list ) ,
116
137
generate_ids_array (
117
138
"msd_hashes" ,
118
- BTreeSet :: from_iter( self . individual_msds. keys( ) . cloned( ) )
139
+ BTreeSet :: from_iter ( self . individual_msds . keys ( ) . cloned ( ) ) ,
119
140
) ,
120
141
generate_artifact_getter ( "msds" , self . individual_msds ) ,
121
142
generate_list_getter ( "msd_list" , self . msds_list ) ,
122
143
generate_ids_array (
123
144
"certificate_hashes" ,
124
- BTreeSet :: from_iter( self . individual_certificates. keys( ) . cloned( ) )
145
+ BTreeSet :: from_iter ( self . individual_certificates . keys ( ) . cloned ( ) ) ,
125
146
) ,
126
147
generate_artifact_getter ( "certificates" , self . individual_certificates ) ,
127
148
generate_list_getter ( "certificate_list" , self . certificates_list ) ,
128
149
generate_ids_array (
129
150
"ctx_commitment_hashes" ,
130
- BTreeSet :: from_iter( self . individual_ctx_commitments. keys( ) . cloned( ) )
151
+ BTreeSet :: from_iter ( self . individual_ctx_commitments . keys ( ) . cloned ( ) ) ,
131
152
) ,
132
153
generate_artifact_getter ( "ctx_commitments" , self . individual_ctx_commitments ) ,
133
154
generate_list_getter ( "ctx_commitments_list" , self . ctx_commitments_list ) ,
134
155
generate_ids_array (
135
156
"proof_transaction_hashes" ,
136
- BTreeSet :: from_iter( self . ctx_proofs. keys( ) . cloned( ) )
157
+ BTreeSet :: from_iter ( self . ctx_proofs . keys ( ) . cloned ( ) ) ,
137
158
) ,
138
159
generate_artifact_getter ( "ctx_proofs" , self . ctx_proofs ) ,
139
- ]
140
- . join(
160
+ ] ,
161
+ true ,
162
+ )
163
+ }
164
+
165
+ fn assemble_code ( functions_code : & [ String ] , include_use_btree_map : bool ) -> String {
166
+ format ! (
167
+ "{}{}
168
+ " ,
169
+ if include_use_btree_map {
170
+ "use std::collections::BTreeMap;
171
+
172
+ "
173
+ } else {
174
+ ""
175
+ } ,
176
+ functions_code. join(
141
177
"
142
178
143
179
"
@@ -231,4 +267,62 @@ pub fn generate_ids_array(array_name: &str, ids: BTreeSet<ArtifactId>) -> String
231
267
#[ cfg( test) ]
232
268
mod tests {
233
269
use super :: * ;
270
+
271
+ #[ test]
272
+ fn generate_ids_array_with_empty_data ( ) {
273
+ assert_eq ! (
274
+ generate_ids_array( "snapshots_digests" , BTreeSet :: new( ) ) ,
275
+ "pub(crate) const fn snapshots_digests<'a>() -> [&'a str; 0] {
276
+ [
277
+ ]
278
+ }"
279
+ ) ;
280
+ }
281
+
282
+ #[ test]
283
+ fn generate_ids_array_with_non_empty_data ( ) {
284
+ assert_eq ! (
285
+ generate_ids_array(
286
+ "snapshots_digests" ,
287
+ BTreeSet :: from_iter( [ "abc" . to_string( ) , "def" . to_string( ) , "hij" . to_string( ) ] )
288
+ ) ,
289
+ r#"pub(crate) const fn snapshots_digests<'a>() -> [&'a str; 3] {
290
+ [
291
+ "abc",
292
+ "def",
293
+ "hij",
294
+ ]
295
+ }"#
296
+ ) ;
297
+ }
298
+
299
+ #[ test]
300
+ fn assemble_code_with_btree_use ( ) {
301
+ assert_eq ! (
302
+ "use std::collections::BTreeMap;
303
+
304
+ fn a() {}
305
+
306
+ fn b() {}
307
+ " ,
308
+ FakeAggregatorData :: assemble_code(
309
+ & [ "fn a() {}" . to_string( ) , "fn b() {}" . to_string( ) ] ,
310
+ true
311
+ )
312
+ )
313
+ }
314
+
315
+ #[ test]
316
+ fn assemble_code_without_btree_use ( ) {
317
+ assert_eq ! (
318
+ "fn a() {}
319
+
320
+ fn b() {}
321
+ " ,
322
+ FakeAggregatorData :: assemble_code(
323
+ & [ "fn a() {}" . to_string( ) , "fn b() {}" . to_string( ) ] ,
324
+ false
325
+ )
326
+ )
327
+ }
234
328
}
0 commit comments