I've expanded it to this:
fn setup_database(app: &mut tauri::App) -> Result<(), Box<dyn error::Error>> {
let db_name = "sqlite-internal.db";
let data_dir = app_dir_insert(db_name, app)?
let db_exists = std::path::Path::new(&data_dir).exists();
match db_exists {
true => {
println!("DB Found?: {db_exists}");
Ok(())
}
false => {
let db_path = find_resource("resources/sqlite-internal.db", app)?;
fs::copy(&db_path, &data_dir)?;
Ok(())
}
}
}
fn app_dir_insert(insert_path: &str, app: &mut tauri::App) -> Result<PathBuf, io::Error> {
match app
.path_resolver()
.app_data_dir()
.map(|mut path| match path.try_exists() {
Ok(true) => {
path.push(insert_path);
println!("Full Path {}", path.to_str().unwrap());
Ok(path)
}
Ok(false) => {
fs::create_dir(path)?;
path.push(insert_path);
println!("Full Path {}", path.to_str().unwrap());
Ok(path)
}
Err(path_err) => Err(path_err),
}) {
Some(generated_path) => generated_path,
None => Err(io::Error::new()),
}
}
fn find_resource(resource_path: &str, app: &mut tauri::App) -> Result<PathBuf, io::Error> {
match app.path_resolver().resolve_resource(resource_path) {
Some(path) => match path.try_exists() {
Ok(true) => {
println!("Path does exist: {}", path.to_str().unwrap());
Ok(path)
}
Ok(false) => {
unimplemented!("Database resource does not exist");
}
Err(path_err) => Err(path_err),
},
None => Err(io::Error::new()),
}
}