forge/cmd/
soldeer.rs

1use clap::Parser;
2use eyre::Result;
3use foundry_common::shell;
4use soldeer_commands::{Command, Verbosity};
5
6/// Available subcommands for Soldeer, see <https://github.com/mario-eth/soldeer/blob/main/crates/commands/src/lib.rs>
7/// for more information
8#[derive(Clone, Debug, Parser)]
9#[command(
10    override_usage = "Native Solidity Package Manager, run `forge soldeer [COMMAND] --help` for more details"
11)]
12pub struct SoldeerArgs {
13    /// Command must be one of the following init/install/login/push/uninstall/update/version.
14    #[command(subcommand)]
15    command: Command,
16}
17
18impl SoldeerArgs {
19    pub async fn run(self) -> Result<()> {
20        let verbosity = Verbosity::new(shell::verbosity(), if shell::is_quiet() { 1 } else { 0 });
21        match soldeer_commands::run(self.command, verbosity).await {
22            Ok(_) => Ok(()),
23            Err(err) => Err(eyre::eyre!("Failed to run soldeer: {err}")),
24        }
25    }
26}
27
28#[cfg(test)]
29mod tests {
30    use soldeer_commands::{commands::Version, Command, Verbosity};
31
32    #[tokio::test]
33    async fn test_soldeer_version() {
34        let command = Command::Version(Version::default());
35        assert!(soldeer_commands::run(command, Verbosity::new(0, 1)).await.is_ok());
36    }
37}