use std::path::PathBuf;
use serde::Deserialize;
use crate::common::{
target_arch::TargetArch,
task::{BuildConfig, CleanConfig, Dependency, InstallConfig, TaskEnv, TaskSource},
};
use anyhow::Result;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum UserCleanLevel {
All,
InSrc,
Output,
}
#[derive(Debug, Deserialize, PartialEq)]
pub struct UserConfigFile {
pub name: String,
pub version: String,
pub description: String,
#[serde(rename = "task-source")]
pub task_source: TaskSource,
#[serde(default = "default_empty_dep")]
pub depends: Vec<Dependency>,
pub build: BuildConfig,
pub install: InstallConfig,
pub clean: CleanConfig,
#[serde(default = "default_empty_env")]
pub envs: Vec<TaskEnv>,
#[serde(rename = "build-once", default = "default_false")]
pub build_once: bool,
#[serde(rename = "install-once", default = "default_false")]
pub install_once: bool,
#[serde(rename = "target-arch")]
pub target_arch: Vec<TargetArch>,
}
impl UserConfigFile {
pub fn load(path: &PathBuf) -> Result<Self> {
let content = std::fs::read_to_string(path)?;
Self::load_from_str(&content)
}
pub fn load_from_str(content: &str) -> Result<Self> {
let config: UserConfigFile = toml::from_str(content)?;
Ok(config)
}
}
fn default_empty_env() -> Vec<TaskEnv> {
vec![]
}
fn default_empty_dep() -> Vec<Dependency> {
vec![]
}
fn default_false() -> bool {
false
}