spotify_cli/output/
settings.rs

1//! Settings output formatting.
2use serde::Serialize;
3
4use crate::domain::settings::Settings;
5use crate::error::Result;
6
7pub fn settings_human(settings: Settings) -> Result<()> {
8    if let Some(country) = settings.country {
9        println!("country={}", country);
10    }
11    if let Some(user_name) = settings.user_name {
12        println!("user_name={}", user_name);
13    }
14    Ok(())
15}
16
17#[derive(Serialize)]
18struct SettingsPayload {
19    country: Option<String>,
20    user_name: Option<String>,
21}
22
23pub fn settings_json(settings: Settings) -> Result<()> {
24    let payload = settings_payload(settings);
25    println!("{}", serde_json::to_string(&payload)?);
26    Ok(())
27}
28
29fn settings_payload(settings: Settings) -> SettingsPayload {
30    SettingsPayload {
31        country: settings.country,
32        user_name: settings.user_name,
33    }
34}
35
36#[cfg(test)]
37mod tests {
38    use super::settings_payload;
39    use crate::domain::settings::Settings;
40
41    #[test]
42    fn settings_payload_shape() {
43        let payload = settings_payload(Settings {
44            country: Some("AU".to_string()),
45            user_name: None,
46        });
47        assert_eq!(payload.country.as_deref(), Some("AU"));
48        assert!(payload.user_name.is_none());
49    }
50}