more_fps/
reusable_temp_dir.rs1use clap::ValueEnum;
2use std::fs;
3use std::io;
4use std::path::Path;
5use std::path::PathBuf;
6use strum_macros::Display;
7
8#[derive(Debug)]
9pub struct ReusableTempDir {
10 base_dir: PathBuf,
11 ffmpeg_dir: PathBuf,
12 generated_frames_dir: PathBuf,
13}
14
15impl ReusableTempDir {
16 pub fn try_new(base_dir: PathBuf, reset_data: ResetData) -> Result<Self, io::Error> {
17 let ffmpeg_dir = base_dir.join("ffmpeg");
18 let generated_frames_dir = base_dir.join("generated_frames");
19
20 match reset_data {
21 ResetData::Everything => fs::remove_dir_all(&base_dir).unwrap_or_default(),
22 ResetData::Nothing => (),
23 };
24
25 dir_exists_or_create(&ffmpeg_dir)?;
27 dir_exists_or_create(&generated_frames_dir)?;
28
29 Ok(Self {
30 base_dir,
31 ffmpeg_dir,
32 generated_frames_dir,
33 })
34 }
35
36 pub fn ffmpeg_dir(&self) -> &PathBuf {
37 &self.ffmpeg_dir
38 }
39
40 pub fn generated_frames_dir(&self) -> &PathBuf {
41 &self.generated_frames_dir
42 }
43
44 pub fn delete(self) -> Result<(), io::Error> {
45 fs::remove_dir_all(self.base_dir)?;
46 Ok(())
47 }
48}
49
50fn dir_exists_or_create(path: &Path) -> Result<(), io::Error> {
51 if !path.exists() {
52 fs::create_dir_all(path)?;
53 }
54 Ok(())
55}
56
57#[derive(ValueEnum, Copy, Clone, Debug, Default, Display)]
58#[strum(serialize_all = "kebab-case")]
59pub enum ResetData {
60 #[default]
65 Everything,
66 Nothing,
68}