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