use crate::domain::environment::EnvironmentName;
use crate::domain::provider::Provider;
use serde::{Deserialize, Serialize};
use std::path::PathBuf;
const DATA_DIR_NAME: &str = "data";
const BUILD_DIR_NAME: &str = "build";
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InternalConfig {
pub build_dir: PathBuf,
pub data_dir: PathBuf,
}
impl InternalConfig {
#[must_use]
pub fn new(env_name: &EnvironmentName) -> Self {
let data_dir = PathBuf::from(".")
.join(DATA_DIR_NAME)
.join(env_name.as_str());
let build_dir = PathBuf::from(".")
.join(BUILD_DIR_NAME)
.join(env_name.as_str());
Self {
build_dir,
data_dir,
}
}
#[must_use]
pub fn with_working_dir(env_name: &EnvironmentName, working_dir: &std::path::Path) -> Self {
let data_dir = working_dir.join(DATA_DIR_NAME).join(env_name.as_str());
let build_dir = working_dir.join(BUILD_DIR_NAME).join(env_name.as_str());
Self {
build_dir,
data_dir,
}
}
#[must_use]
pub fn templates_dir(&self) -> PathBuf {
self.data_dir.join(super::TEMPLATES_DIR_NAME)
}
#[must_use]
pub fn traces_dir(&self) -> PathBuf {
self.data_dir.join(super::TRACES_DIR_NAME)
}
#[must_use]
pub fn ansible_build_dir(&self) -> PathBuf {
self.build_dir.join(super::ANSIBLE_DIR_NAME)
}
#[must_use]
pub fn tofu_build_dir_for_provider(&self, provider: Provider) -> PathBuf {
self.build_dir
.join(super::TOFU_DIR_NAME)
.join(provider.as_str())
}
#[must_use]
pub fn ansible_templates_dir(&self) -> PathBuf {
self.templates_dir().join(super::ANSIBLE_DIR_NAME)
}
#[must_use]
pub fn tofu_templates_dir(&self) -> PathBuf {
self.templates_dir().join(super::TOFU_DIR_NAME)
}
}