hermes_cli_components/impls/config/
save_toml_config.rs

1use cgp::core::error::CanRaiseError;
2use cgp::core::Async;
3use hermes_runtime_components::traits::fs::write_file::CanWriteStringToFile;
4use hermes_runtime_components::traits::runtime::HasRuntime;
5use serde::Serialize;
6
7use crate::traits::config::config_path::HasConfigPath;
8use crate::traits::config::write_config::ConfigWriter;
9use crate::traits::types::config::HasConfigType;
10
11pub struct WriteTomlConfig;
12
13impl<App, Runtime, Config> ConfigWriter<App> for WriteTomlConfig
14where
15    App: HasRuntime<Runtime = Runtime>
16        + HasConfigType<Config = Config>
17        + HasConfigPath
18        + CanRaiseError<Runtime::Error>
19        + CanRaiseError<toml::ser::Error>,
20    Runtime: CanWriteStringToFile,
21    Config: Async + Serialize,
22{
23    async fn write_config(app: &App, config: &App::Config) -> Result<(), App::Error> {
24        let config_str = toml::to_string_pretty(config).map_err(App::raise_error)?;
25
26        let config_path = app.config_path();
27
28        app.runtime()
29            .write_string_to_file(config_path, &config_str)
30            .await
31            .map_err(App::raise_error)?;
32
33        Ok(())
34    }
35}