lux_cli/
run.rs

1use clap::Args;
2use eyre::{OptionExt, Result};
3use lux_lib::{config::Config, operations, project::Project};
4
5use crate::build::{self, Build};
6
7#[derive(Args)]
8pub struct Run {
9    args: Vec<String>,
10
11    /// Do not add `require('lux').loader()` to `LUA_INIT`.
12    /// If a rock has conflicting transitive dependencies,
13    /// disabling the Lux loader may result in the wrong modules being loaded.
14    #[clap(default_value_t = false)]
15    #[arg(long)]
16    no_loader: bool,
17
18    #[clap(flatten)]
19    build: Build,
20}
21
22pub async fn run(run_args: Run, config: Config) -> Result<()> {
23    let project = Project::current()?.ok_or_eyre("not in a project!")?;
24
25    build::build(run_args.build, config.clone()).await?;
26
27    operations::Run::new()
28        .project(&project)
29        .args(&run_args.args)
30        .config(&config)
31        .disable_loader(run_args.no_loader)
32        .run()
33        .await?;
34
35    Ok(())
36}