Skip to main content

aether_cli/
settings_args.rs

1use aether_project::AetherSettingsSource;
2use std::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) -> Option<AetherSettingsSource> {
15        if let Some(json) = &self.settings_json {
16            Some(AetherSettingsSource::Json(json.clone()))
17        } else {
18            self.settings_file.as_ref().map(|path| AetherSettingsSource::File(path.clone()))
19        }
20    }
21}
22
23#[cfg(test)]
24mod tests {
25    use super::*;
26
27    #[test]
28    fn settings_json_maps_to_json_source() {
29        let args = SettingsSourceArgs { settings_json: Some("{\"agents\":[]}".to_string()), settings_file: None };
30
31        let Some(AetherSettingsSource::Json(json)) = args.source() else {
32            panic!("expected JSON settings source");
33        };
34        assert_eq!(json, "{\"agents\":[]}");
35    }
36
37    #[test]
38    fn settings_file_maps_to_file_source() {
39        let args = SettingsSourceArgs { settings_json: None, settings_file: Some(PathBuf::from("settings.json")) };
40
41        let Some(AetherSettingsSource::File(path)) = args.source() else {
42            panic!("expected file settings source");
43        };
44        assert_eq!(path, PathBuf::from("settings.json"));
45    }
46}