1use clap::Parser;
5use move_cli::base::test::UnitTestResult;
6use move_package_alt_compilation::build_config::BuildConfig;
7use std::path::Path;
8use sui_sdk::wallet_context::WalletContext;
9
10pub mod build;
11pub mod cache_package;
12pub mod coverage;
13pub mod disassemble;
14pub mod migrate;
15pub mod new;
16pub mod summary;
17pub mod unit_test;
18pub mod update_deps;
19
20#[derive(Parser)]
21pub enum Command {
22 Build(build::Build),
23 Coverage(coverage::Coverage),
24 #[command(hide = true)]
25 CachePackage(cache_package::CachePackage),
26 Disassemble(disassemble::Disassemble),
27 Migrate(migrate::Migrate),
28 New(new::New),
29 Test(unit_test::Test),
30 Summary(summary::Summary),
31 UpdateDeps(update_deps::UpdateDeps),
32}
33
34pub enum CommandMeta {
37 Summary(summary::PackageSummaryMetadata),
38}
39
40pub async fn execute_move_command(
41 package_path: Option<&Path>,
42 build_config: BuildConfig,
43 command: Command,
44 command_meta: Option<CommandMeta>,
45 wallet: &WalletContext,
46) -> anyhow::Result<()> {
47 match command {
48 Command::Build(c) => c.execute(package_path, build_config, wallet).await,
49 Command::CachePackage(c) => c.execute().await,
50 Command::Coverage(c) => c.execute(package_path, build_config).await,
51 Command::Disassemble(c) => c.execute(package_path, build_config).await,
52 Command::Migrate(c) => c.execute(package_path, build_config).await,
53 Command::New(c) => c.execute(package_path),
54 Command::Summary(s) => {
55 let additional_metadata = command_meta
56 .map(|meta| {
57 let CommandMeta::Summary(metadata) = meta;
58 metadata
59 })
60 .unwrap_or_default();
61 s.execute(package_path, build_config, additional_metadata)
62 .await
63 }
64 Command::Test(c) => {
65 let result = c.execute(package_path, build_config, wallet).await?;
66
67 if let UnitTestResult::Failure = result {
69 std::process::exit(1)
70 }
71
72 Ok(())
73 }
74 Command::UpdateDeps(c) => c.execute(package_path, build_config, wallet).await,
75 }
76}