mod builder;
mod cli;
mod compile_db;
mod config;
mod diagnostics;
mod error;
mod project;
mod resolver;
mod toolchain;
use cli::Commands;
fn main() {
if let Err(e) = run() {
eprintln!("Error: {}", e);
std::process::exit(1);
}
}
fn run() -> error::Result<()> {
let cli = cli::parse_args();
match &cli.command {
Commands::New { name, r#type, lib, std } => {
let project_type = match (r#type, lib) {
(Some(t), _) => t.clone(),
(None, true) => config::ProjectType::StaticLibrary,
(None, false) => config::ProjectType::Binary,
};
project::Project::init(name, project_type, std.clone())
}
Commands::Build { release } => {
let mut project = project::Project::load(&std::env::current_dir()?)?;
project.resolve_dependencies()?;
builder::build_project(&project, *release)
}
Commands::Run { release } => {
let mut project = project::Project::load(&std::env::current_dir()?)?;
project.resolve_dependencies()?;
builder::run_project(&project, *release)
}
Commands::Clean => {
let project = project::Project::load(&std::env::current_dir()?)?;
builder::clean_project(&project)
}
Commands::Rebuild { release } => {
let mut project = project::Project::load(&std::env::current_dir()?)?;
project.resolve_dependencies()?;
builder::rebuild_project(&project, *release)
}
Commands::Format => {
let project = project::Project::load(&std::env::current_dir()?)?;
builder::fmt_project(&project)
}
Commands::Add { name } => {
let mut project = project::Project::load(&std::env::current_dir()?)?;
project.add_dependency(name)
}
Commands::Remove { name } => {
let mut project = project::Project::load(&std::env::current_dir()?)?;
project.remove_dependency(name)
}
}
}