1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//! The module that implements the `wasmtime config` command.

use anyhow::Result;
use clap::Parser;

const CONFIG_NEW_AFTER_HELP: &str =
    "If no file path is specified, the system configuration file path will be used.";

/// Controls Wasmtime configuration settings
#[derive(Parser)]
#[clap(name = "config")]
pub struct ConfigCommand {
    #[clap(subcommand)]
    subcommand: ConfigSubcommand,
}

#[derive(clap::Subcommand)]
enum ConfigSubcommand {
    /// Creates a new Wasmtime configuration file
    #[clap(after_help = CONFIG_NEW_AFTER_HELP)]
    New(ConfigNewCommand),
}

impl ConfigCommand {
    /// Executes the command.
    pub fn execute(self) -> Result<()> {
        match self.subcommand {
            ConfigSubcommand::New(c) => c.execute(),
        }
    }
}

/// Creates a new Wasmtime configuration file
#[derive(Parser)]
#[clap(name = "new", after_help = CONFIG_NEW_AFTER_HELP)]
pub struct ConfigNewCommand {
    /// The path of the new configuration file
    #[clap(index = 1, value_name = "FILE_PATH")]
    path: Option<String>,
}

impl ConfigNewCommand {
    /// Executes the command.
    pub fn execute(self) -> Result<()> {
        let path = wasmtime_cache::create_new_config(self.path.as_ref())?;

        println!(
            "Successfully created a new configuration file at '{}'.",
            path.display()
        );

        Ok(())
    }
}