pub mod parser;
pub use parser::parse_gradle_build_script;
use std::path::PathBuf;
#[derive(Debug, Clone)]
pub struct GradleProject {
pub name: String,
pub group: Option<String>,
pub version: Option<String>,
pub source_compatibility: Option<String>,
pub target_compatibility: Option<String>,
pub main_class: Option<String>,
pub base_dir: PathBuf,
pub build_file: PathBuf,
pub tasks: Vec<Task>,
pub dependencies: Vec<Dependency>,
pub repositories: Vec<Repository>,
pub plugins: Vec<Plugin>,
pub subprojects: Vec<GradleProject>,
}
#[derive(Debug, Clone)]
pub struct Task {
pub name: String,
pub task_type: Option<String>,
pub description: Option<String>,
pub group: Option<String>,
pub depends_on: Vec<String>,
pub actions: Vec<String>,
}
#[derive(Debug, Clone)]
pub struct Dependency {
pub configuration: String,
pub notation: String,
pub group: Option<String>,
pub artifact: Option<String>,
pub version: Option<String>,
pub classifier: Option<String>,
pub extension: Option<String>,
}
#[derive(Debug, Clone)]
pub struct Repository {
pub name: String,
pub repo_type: RepositoryType,
pub url: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum RepositoryType {
Maven,
Ivy,
FlatDir,
MavenCentral,
JCenter,
Google,
}
#[derive(Debug, Clone)]
pub struct Plugin {
pub id: String,
pub version: Option<String>,
}
impl GradleProject {
pub fn new(base_dir: PathBuf, build_file: PathBuf) -> Self {
Self {
name: base_dir
.file_name()
.and_then(|n| n.to_str())
.unwrap_or("project")
.to_string(),
group: None,
version: None,
source_compatibility: None,
target_compatibility: None,
main_class: None,
base_dir,
build_file,
tasks: Vec::new(),
dependencies: Vec::new(),
repositories: Vec::new(),
plugins: Vec::new(),
subprojects: Vec::new(),
}
}
pub fn find_task(&self, name: &str) -> Option<&Task> {
self.tasks.iter().find(|t| t.name == name)
}
pub fn task_names(&self) -> Vec<String> {
self.tasks.iter().map(|t| t.name.clone()).collect()
}
}