use std::fs::{File, OpenOptions};
use std::io::ErrorKind;
pub fn create_and_adapt_filename_if_exists(filename: &str) -> Result<File, std::io::Error> {
let mut counter: i32 = 0;
let mut open_result = open_file_if_not_exists(filename);
while is_already_exists_error(&open_result) && counter < std::i32::MAX {
counter = counter + 1;
let filename_with_counter = format!("{}.{}", filename, counter);
open_result = open_file_if_not_exists(&filename_with_counter);
}
open_result
}
fn open_file_if_not_exists(filename: &str) -> Result<File, std::io::Error> {
OpenOptions::new()
.write(true)
.create_new(true) .open(filename)
}
fn is_already_exists_error(result: &Result<File, std::io::Error>) -> bool {
match result {
Err(err) => err.kind() == ErrorKind::AlreadyExists,
Ok(_) => false,
}
}