use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use crate::model::dependency::Dependency;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct Build {
pub source_directory: Option<String>,
pub script_source_directory: Option<String>,
pub test_source_directory: Option<String>,
pub output_directory: Option<String>,
pub test_output_directory: Option<String>,
#[serde(rename = "extensions")]
pub extensions: Option<Vec<Extension>>,
pub default_goal: Option<String>,
#[serde(rename = "resources")]
pub resources: Option<Vec<Resource>>,
#[serde(rename = "testResources")]
pub test_resources: Option<Vec<Resource>>,
#[serde(rename = "plugins")]
pub plugins: Option<Vec<Plugin>>,
#[serde(rename = "pluginManagement")]
pub plugin_management: Option<PluginManagement>,
pub directory: Option<String>,
pub final_name: Option<String>,
#[serde(rename = "filters")]
pub filters: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct Extension {
pub group_id: String,
pub artifact_id: String,
pub version: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct Resource {
pub target_path: Option<String>,
pub filtering: Option<bool>,
pub directory: Option<String>,
#[serde(rename = "includes")]
pub includes: Option<Vec<String>>,
#[serde(rename = "excludes")]
pub excludes: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct Plugin {
pub group_id: Option<String>,
pub artifact_id: String,
pub version: Option<String>,
#[serde(rename = "extensions")]
pub extensions: Option<bool>,
pub executions: Option<Vec<Execution>>,
pub dependencies: Option<Vec<Dependency>>,
pub goals: Option<HashMap<String, String>>,
pub inherited: Option<bool>,
pub configuration: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct Execution {
pub id: Option<String>,
pub phase: Option<String>,
#[serde(rename = "goals")]
pub goals: Option<Vec<String>>,
pub configuration: Option<serde_json::Value>,
pub inherited: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct PluginManagement {
#[serde(rename = "plugins")]
pub plugins: Option<Vec<Plugin>>,
}
impl Build {
pub fn source_directory(&self) -> &str {
self.source_directory
.as_deref()
.unwrap_or("src/main/java")
}
pub fn test_source_directory(&self) -> &str {
self.test_source_directory
.as_deref()
.unwrap_or("src/test/java")
}
pub fn output_directory(&self) -> &str {
self.output_directory
.as_deref()
.unwrap_or("target/classes")
}
pub fn test_output_directory(&self) -> &str {
self.test_output_directory
.as_deref()
.unwrap_or("target/test-classes")
}
}