forest/cli/subcommands/
config_cmd.rs1use 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,
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}