use serde::{Deserialize, Serialize};
use crate::profile::{transform::ContentTransformer, variables::Variables, MergeMode, Priority};
use std::path::PathBuf;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct Dotfile {
pub path: PathBuf,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub rename: Option<PathBuf>,
#[serde(alias = "target", skip_serializing_if = "Option::is_none", default)]
pub overwrite_target: Option<PathBuf>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub priority: Option<Priority>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub variables: Option<Variables>,
#[serde(skip_serializing_if = "Vec::is_empty", default)]
pub transformers: Vec<ContentTransformer>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub merge: Option<MergeMode>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub template: Option<bool>,
}
impl Dotfile {
pub fn is_template(&self) -> bool {
self.template.unwrap_or(true)
}
}