cargo.tomlでbincode = “1.3”を設定する
fn save_to_binary_file(&self, path: &str) -> Result<(), String> { let encoded = bincode::serialize(self).map_err(|e| e.to_string())?; let mut file = File::create(path).map_err(|e| e.to_string())?; file.write_all(&encoded).map_err(|e| e.to_string())?; Ok(()) } fn load_from_binary_file(path: &str) -> Result<Table, String> { let mut file = File::open(path).map_err(|e| e.to_string())?; let mut buffer = Vec::new(); file.read_to_end(&mut buffer).map_err(|e| e.to_string())?; let table: Table = bincode::deserialize(&buffer).map_err(|e| e.to_string())?; Ok(table) }
fn main()
let mut table = create_sample_table(); table.save_to_binary_file("users.bin").expect("Failed to save binary"); let loaded = Table::load_from_binary_file("users.bin").expect("Failed to load binary"); println!("読み込んだtable: {:?}", loaded);
読み込んだtable: Table { name: “users”, columns: Columns { schema: {“name”: ColumnSchema { order: 1, column_type: Text, constraint: None }, “id”: ColumnSchema { order: 0, column_type: Integer, constraint: PrimaryKey }, “age”: ColumnSchema { order: 2, column_type: Integer, constraint: None }}, order: [“id”, “name”, “age”] }, rows: [[Integer(1), Text(“Alice”), Integer(30)], [Integer(2), Text(“Bob”), Integer(25)]] }
$ cat users.bin
usersidnameageidnameageAliceBob