forest/cli/subcommands/
config_cmd.rs

1// Copyright 2019-2025 ChainSafe Systems
2// SPDX-License-Identifier: Apache-2.0, MIT
3
4use std::io::Write;
5
6use anyhow::Context as _;
7use clap::Subcommand;
8
9use crate::cli::subcommands::Config;
10
11#[derive(Debug, Subcommand)]
12pub enum ConfigCommands {
13    /// Dump default configuration to standard output
14    Dump,
15}
16
17impl ConfigCommands {
18    pub fn run<W: Write + Unpin>(self, sink: &mut W) -> anyhow::Result<()> {
19        match self {
20            Self::Dump => writeln!(
21                sink,
22                "{}",
23                toml::to_string(&Config::default())
24                    .context("Could not convert configuration to TOML format")?
25            )
26            .context("Failed to write the configuration"),
27        }
28    }
29}
30
31#[cfg(test)]
32mod tests {
33    use super::*;
34
35    #[tokio::test]
36    async fn given_default_configuration_should_print_valid_toml() {
37        let expected_config = Config::default();
38        let mut sink = std::io::BufWriter::new(Vec::new());
39
40        ConfigCommands::Dump.run(&mut sink).unwrap();
41
42        let actual_config: Config = toml::from_str(std::str::from_utf8(sink.buffer()).unwrap())
43            .expect("Invalid configuration!");
44
45        assert_eq!(expected_config, actual_config);
46    }
47}