【Rust】ファイルの上書き処理

File::createとwrite_allで元のデータは上書かれる。
例えば、元データが4行で、上書きデータが2行だった場合でも、上書き後は2行になる。

{"family":"john","first":"fox"}
{"family":"adam","first":"can"}
{"family":"john","first":"fox"}
{"family":"adam","first":"can"}
use serde::{Serialize, Deserialize};
use std::path::Path;
use std::fs::{File};
use std::io::{Write};

#[derive(Serialize, Deserialize, Clone, Debug)]
struct Name {
    family: String,
    first: String,
}

#[tokio::main]
async fn main() {

    let name1 = Name {family:"yamada".to_string(), first: "taro".to_string()};
    let name2 = Name {family:"sato".to_string(), first: "kazuki".to_string()};

    let mut vect: Vec<Name> = Vec::new();
    vect.push(name1);
    vect.push(name2);

    let file_path = format!("./data/names.txt");
    let mut file = File::create(file_path.clone()).unwrap();
    for name in vect {
        let serialized: Vec<u8> = serde_json::to_vec(&name).unwrap();
        file.write_all(&serialized).expect("write failed");
        file.write_all(b"\n").expect("write failed");
    }
    println!("done");

}  
{"family":"yamada","first":"taro"}
{"family":"sato","first":"kazuki"}

なるほどね!