Pues dia hiperproductivo hoy, al final me he puesto tambien con el cli de los workspaces y lo he dejado casi listo para una primera version. Me falta algo mas de testeo pero me vale por ahora conforme se ha quedado.
Le he a;adido unos cuantos subcomandos al binario. create/clone/add/remove/clean. Y es bastante directo todo:
fn main() {
let args = Cli::parse();
match &args.command {
Commands::Create{ name } => {
create_workspace(name);
},
Commands::Clone => {
clone_workspace();
},
Commands::Add { name } => {
add_package(name);
},
Commands::Remove { name } => {
remove_package(name);
},
Commands::Clean => {
clean_workspace();
}
};
}
struct Cli {
#[clap(subcommand)]
command: Commands,
}
#[derive(Parser)]
enum Commands {
Create{ name: String },
Clone,
Add { name: String },
Remove { name: String },
Clean,
}
Y un ejemplo de la funcion y comando
fn add_package(name: &String) {
let mut workspace = parse_workspace();
// add package (repo) and then refresh the content of the Projects file
workspace.projects.push(name.to_string());
let serialized_projects = serde_json::to_string_pretty(&workspace).unwrap();
let mut file = File::options().write(true).read(true).open("Projects").expect("Could not create the Projects file");
file.set_len(0).unwrap();
file.write_all(serialized_projects.as_bytes()).expect("Error writing the Projects file");
}
Asi que mas o menos ya tengo una manera de hacer workspaces. Tengo todavia algunas ideas alrededor de todo esto pero por ahora creo que tengo esto funcionando de una manera con la que estoy relativamente satisfecho. Lo siguiente es actualizar el los templates que tengo (tambien tengo unas cuantas ideas alrededor de esto) y ponerme con el builder.