@@ -9,13 +9,39 @@ use std::fs::File;
99use std:: io:: { BufReader , BufWriter , Write } ;
1010
1111#[ derive( Serialize , Deserialize , Debug ) ]
12- struct RTableMetadata {
13- name : String ,
14- primary_key_column : usize ,
15- num_records : i64 ,
16- num_columns : usize ,
12+ pub struct RTableMetadata {
13+ pub name : String ,
14+ pub primary_key_column : usize ,
15+ pub num_records : i64 ,
16+ pub num_columns : usize ,
17+ }
18+
19+ pub trait StatePersistence {
20+ fn load_state ( & self ) -> RTable {
21+ let hardcoded_filename = "./table.data" ;
22+
23+ let file = BufReader :: new ( File :: open ( hardcoded_filename) . expect ( "Should open file." ) ) ;
24+ let table_meta: RTableMetadata =
25+ bincode:: deserialize_from ( file) . expect ( "Should deserialize." ) ;
26+
27+ RTable {
28+ name : table_meta. name . clone ( ) ,
29+ primary_key_column : table_meta. primary_key_column ,
30+ num_columns : table_meta. num_columns ,
31+ num_records : table_meta. num_records ,
32+
33+ // TODO: Should we load these up too or create new ones?
34+ // I think load them up to, so we need to do that as well
35+ page_range : PageRange :: new ( table_meta. num_columns as i64 ) ,
36+ page_directory : HashMap :: new ( ) ,
37+ index : RIndex :: new ( ) ,
38+ }
39+ }
1740}
1841
42+ impl StatePersistence for RTableMetadata { }
43+ impl StatePersistence for RTable { }
44+
1945#[ derive( Clone , Default ) ]
2046#[ pyclass]
2147pub struct RTable {
@@ -188,37 +214,20 @@ impl RTable {
188214 pub fn save_state ( & self ) {
189215 let hardcoded_filename = "./table.data" ;
190216
191- let table_meta = RTableMetadata {
192- name : self . name . clone ( ) ,
193- num_columns : self . num_columns ,
194- num_records : self . num_records ,
195- primary_key_column : self . primary_key_column ,
196- } ;
217+ let table_meta = self . get_metadata ( ) ;
197218
198219 let table_bytes: Vec < u8 > = bincode:: serialize ( & table_meta) . expect ( "Should serialize." ) ;
199220
200221 let mut file = BufWriter :: new ( File :: create ( hardcoded_filename) . expect ( "Should open file." ) ) ;
201222 file. write_all ( & table_bytes) . expect ( "Should serialize." ) ;
202223 }
203224
204- pub fn load_state ( & self ) -> RTable {
205- let hardcoded_filename = "./table.data" ;
206-
207- let file = BufReader :: new ( File :: open ( hardcoded_filename) . expect ( "Should open file." ) ) ;
208- let table_meta: RTableMetadata =
209- bincode:: deserialize_from ( file) . expect ( "Should deserialize." ) ;
210-
211- RTable {
212- name : table_meta. name . clone ( ) ,
213- primary_key_column : table_meta. primary_key_column ,
214- num_columns : table_meta. num_columns ,
215- num_records : table_meta. num_records ,
216-
217- // TODO: Should we load these up too or create new ones?
218- // I think load them up to, so we need to do that as well
219- page_range : PageRange :: new ( table_meta. num_columns as i64 ) ,
220- page_directory : HashMap :: new ( ) ,
221- index : RIndex :: new ( ) ,
225+ pub fn get_metadata ( & self ) -> RTableMetadata {
226+ RTableMetadata {
227+ name : self . name . clone ( ) ,
228+ primary_key_column : self . primary_key_column ,
229+ num_columns : self . num_columns ,
230+ num_records : self . num_records ,
222231 }
223232 }
224233
0 commit comments