lux_cli/
generate_rockspec.rs1use clap::Args;
2use eyre::Result;
3use lux_lib::{package::PackageName, project::Project, rockspec::Rockspec, workspace::Workspace};
4
5#[derive(Args)]
6pub struct GenerateRockspec {
7 #[arg(short, long, visible_short_alias = 'p')]
9 package: Option<PackageName>,
10}
11
12pub async fn generate_rockspec(data: GenerateRockspec) -> Result<()> {
13 let workspace = Workspace::current_or_err()?;
14
15 if let Some(package) = data.package {
16 generate_project_rockspec(workspace.select_member(&package)?).await
17 } else {
18 for project in workspace.members() {
19 generate_project_rockspec(project).await?;
20 }
21 Ok(())
22 }
23}
24
25async fn generate_project_rockspec(project: &Project) -> Result<()> {
26 let toml = project.toml().into_remote(None)?;
27 let rockspec = toml.to_lua_remote_rockspec_string()?;
28
29 let path = project
30 .root()
31 .join(format!("{}-{}.rockspec", toml.package(), toml.version()));
32
33 tokio::fs::write(&path, rockspec).await?;
34
35 println!("Wrote rockspec to {}", path.display());
36 Ok(())
37}