Skip to main content

lux_cli/
generate_rockspec.rs

1use clap::Args;
2use eyre::Result;
3use lux_lib::{package::PackageName, project::Project, rockspec::Rockspec, workspace::Workspace};
4
5#[derive(Args)]
6pub struct GenerateRockspec {
7    /// Package to generate the rockspec for.
8    #[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}