cog_task/server/
env.rs

1use eyre::{Context, Result};
2use std::env::current_dir;
3use std::path::PathBuf;
4
5#[derive(Debug, Default, Clone)]
6pub struct Env {
7    root_dir: PathBuf,
8    task_dir: PathBuf,
9    output_dir: PathBuf,
10    resource_dir: PathBuf,
11}
12
13impl Env {
14    pub fn new(task_dir: PathBuf) -> Result<Self> {
15        let root_dir = current_dir().wrap_err("Unable to get current directory.")?;
16        let task_name = task_dir.file_name().unwrap().to_str().unwrap().to_owned();
17
18        let output_dir = root_dir.join("output").join(&task_name);
19        if !output_dir.is_dir() {
20            std::fs::create_dir_all(&output_dir)
21                .wrap_err_with(|| format!("Unable to create output directory: {output_dir:?}"))?;
22        }
23
24        let resource_dir = if task_dir.join("data").exists() {
25            task_dir.join("data")
26        } else {
27            task_dir.clone()
28        };
29
30        Ok(Self {
31            root_dir,
32            task_dir,
33            output_dir,
34            resource_dir,
35        })
36    }
37
38    #[inline(always)]
39    pub fn root(&self) -> &PathBuf {
40        &self.root_dir
41    }
42
43    #[inline(always)]
44    pub fn task(&self) -> &PathBuf {
45        &self.task_dir
46    }
47
48    #[inline(always)]
49    pub fn output(&self) -> &PathBuf {
50        &self.output_dir
51    }
52
53    #[inline(always)]
54    pub fn resource(&self) -> &PathBuf {
55        &self.resource_dir
56    }
57}