«Не может выйти из переменной, потому что она заимствована» при вращении переменных

Я пишу программу, которая пишет в файл и вращает файл, в который он пишет время от времени. Когда я проверяю, чтобы повернуть файл, я не могу изменить файл, так как он заимствован моей структурой. Даже если яdrop экземпляр структуры, я не могу восстановить право собственности на файл, чтобы переименовать его. Вот мойпример:

use std::fs::File;
use std::io::{Write};
use std::mem::{drop};

pub struct FileStruct<W: Write> {
    pub writer: Option<W>,
}

impl <W: Write> FileStruct<W> {
    pub fn new(writer: W) -> FileStruct<W> {
        FileStruct {
            writer: Some(writer),
        }
    }
}

fn main() {
    let mut file = File::create("tmp.txt").unwrap();
    let mut tmp = FileStruct::new(&mut file);
    loop {
        if true { //will be time based if check
            drop(tmp);
            drop(file);
            file = File::create("tmp2.txt").unwrap();
            tmp = FileStruct::new(&mut file);
        }
        // write to file
    }
}

Я знаю, что могу это сделать, переместив создание файла вnew вызов функцииFileStruct вместо того, чтобы иметь промежуточную переменную,file, но я хотел бы знать, почему этот метод, где я принудительно отбрасываю все переменные, где должны быть возвращены все ссылки на переменные, не работает.

Ответы на вопрос(2)

Ваш ответ на вопрос