use std::path::PathBuf;
use schemars::JsonSchema;
use serde::Deserialize;
use serde::Serialize;
use crate::config::CURRENT_DIR;
use crate::consts::PHP_EXTENSION;
use crate::error::Error;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "kebab-case", deny_unknown_fields)]
pub struct SourceConfiguration {
pub workspace: PathBuf,
#[serde(default)]
pub paths: Vec<String>,
#[serde(default)]
pub includes: Vec<String>,
#[serde(default)]
pub excludes: Vec<String>,
#[serde(default = "default_extensions")]
pub extensions: Vec<String>,
}
impl SourceConfiguration {
pub fn from_workspace(workspace: PathBuf) -> Self {
Self {
workspace,
paths: vec![],
includes: vec![],
excludes: vec![],
extensions: vec![PHP_EXTENSION.to_string()],
}
}
}
impl SourceConfiguration {
pub fn normalize(&mut self) -> Result<(), Error> {
let workspace =
if !self.workspace.is_absolute() { (*CURRENT_DIR).join(&self.workspace) } else { self.workspace.clone() };
self.workspace = workspace.canonicalize().map_err(|e| Error::CanonicalizingPath(workspace, e))?;
Ok(())
}
}
fn default_extensions() -> Vec<String> {
vec![PHP_EXTENSION.to_string()]
}