aether_cli/
settings_args.rs1use aether_project::{AetherSettingsSource, SettingsFileSource};
2use std::path::{Path, PathBuf};
3
4#[derive(Clone, Debug, Default, clap::Args)]
5pub struct SettingsSourceArgs {
6 #[arg(long = "settings-json", conflicts_with = "settings_file")]
7 pub settings_json: Option<String>,
8
9 #[arg(long = "settings-file", conflicts_with = "settings_json")]
10 pub settings_file: Option<PathBuf>,
11}
12
13impl SettingsSourceArgs {
14 pub fn source(&self, root: &Path) -> Option<AetherSettingsSource> {
15 if let Some(json) = &self.settings_json {
16 Some(AetherSettingsSource::Json(json.clone()))
17 } else {
18 self.settings_file
19 .as_ref()
20 .map(|path| AetherSettingsSource::File(SettingsFileSource::new(path.clone(), root)))
21 }
22 }
23}
24
25#[cfg(test)]
26mod tests {
27 use super::*;
28
29 #[test]
30 fn settings_json_maps_to_json_source() {
31 let args = SettingsSourceArgs { settings_json: Some("{\"agents\":[]}".to_string()), settings_file: None };
32
33 let Some(AetherSettingsSource::Json(json)) = args.source(Path::new(".")) else {
34 panic!("expected JSON settings source");
35 };
36 assert_eq!(json, "{\"agents\":[]}");
37 }
38
39 #[test]
40 fn settings_file_maps_to_file_source() {
41 let args = SettingsSourceArgs { settings_json: None, settings_file: Some(PathBuf::from("settings.json")) };
42
43 let Some(AetherSettingsSource::File(source)) = args.source(Path::new("/workspace")) else {
44 panic!("expected file settings source");
45 };
46 assert_eq!(source, SettingsFileSource::new("settings.json", "/workspace"));
47 }
48}