• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

drsanguin / convertible_couch / #173

23 Aug 2025 10:41PM UTC coverage: 96.699% (+24.0%) from 72.704%
#173

push

github

drsanguin
ci: migrated coverage from tarpaulin to grcov

498 of 515 relevant lines covered (96.7%)

3594.86 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

95.45
/bin/src/application.rs
1
use std::marker::PhantomData;
2

3
use convertible_couch_lib::{
4
    displays_settings::{
5
        CurrentDisplaysSettingsApiTrait, DisplaysSettings, DisplaysSettingsResult,
6
    },
7
    log::configure_logger,
8
    speakers_settings::{
9
        CurrentSpeakersSettingsApiTrait, SpeakersSettings, SpeakersSettingsResult,
10
    },
11
    ApplicationError,
12
};
13

14
use crate::commands::{Arguments, Commands};
15

16
#[derive(Debug, PartialEq, Eq)]
17
pub enum ApplicationResult {
18
    DisplaysAndSpeakers {
19
        displays_result: DisplaysSettingsResult,
20
        speakers_result: SpeakersSettingsResult,
21
    },
22
    DisplaysOnly {
23
        displays_result: DisplaysSettingsResult,
24
    },
25
    SpeakersOnly {
26
        speakers_result: SpeakersSettingsResult,
27
    },
28
}
29

30
pub struct Application<
31
    TDisplaysSettingsApi: CurrentDisplaysSettingsApiTrait,
32
    TSpeakersSettingsApi: CurrentSpeakersSettingsApiTrait,
33
    TDisplaysSettings: DisplaysSettings<TDisplaysSettingsApi>,
34
    TSpeakersSettings: SpeakersSettings<TSpeakersSettingsApi>,
35
> {
36
    displays_settings: TDisplaysSettings,
37
    speakers_settings: TSpeakersSettings,
38
    displays_settings_api: PhantomData<TDisplaysSettingsApi>,
39
    speakers_settings_api: PhantomData<TSpeakersSettingsApi>,
40
}
41

42
impl<
43
        TDisplaysSettingsApi: CurrentDisplaysSettingsApiTrait,
44
        TSpeakersSettingsApi: CurrentSpeakersSettingsApiTrait,
45
        TDisplaysSettings: DisplaysSettings<TDisplaysSettingsApi>,
46
        TSpeakersSettings: SpeakersSettings<TSpeakersSettingsApi>,
47
    >
48
    Application<TDisplaysSettingsApi, TSpeakersSettingsApi, TDisplaysSettings, TSpeakersSettings>
49
{
50
    pub fn bootstrap(
224✔
51
        displays_settings_api: TDisplaysSettingsApi,
224✔
52
        speakers_settings_api: TSpeakersSettingsApi,
224✔
53
    ) -> Self {
224✔
54
        Self {
224✔
55
            displays_settings: TDisplaysSettings::new(displays_settings_api),
224✔
56
            speakers_settings: TSpeakersSettings::new(speakers_settings_api),
224✔
57
            displays_settings_api: PhantomData,
224✔
58
            speakers_settings_api: PhantomData,
224✔
59
        }
224✔
60
    }
224✔
61

62
    pub fn execute(&mut self, args: &Arguments) -> Result<ApplicationResult, ApplicationError> {
36✔
63
        match &args.command {
36✔
64
            Commands::DisplaysAndSpeakers {
65
                displays,
3✔
66
                speakers,
3✔
67
                shared,
3✔
68
            } => {
69
                configure_logger(&shared.log_level)?;
3✔
70

71
                let displays_result = self.displays_settings.change_primary_display(
3✔
72
                    &displays.desktop_display_name,
3✔
73
                    &displays.couch_display_name,
3✔
74
                )?;
×
75

76
                let speakers_result = self.speakers_settings.change_default_speaker(
3✔
77
                    &speakers.desktop_speaker_name,
3✔
78
                    &speakers.couch_speaker_name,
3✔
79
                )?;
×
80

81
                Ok(ApplicationResult::DisplaysAndSpeakers {
3✔
82
                    displays_result,
3✔
83
                    speakers_result,
3✔
84
                })
3✔
85
            }
86
            Commands::DisplaysOnly { displays, shared } => {
24✔
87
                configure_logger(&shared.log_level)?;
24✔
88

89
                let displays_result = self.displays_settings.change_primary_display(
24✔
90
                    &displays.desktop_display_name,
24✔
91
                    &displays.couch_display_name,
24✔
92
                )?;
16✔
93

94
                Ok(ApplicationResult::DisplaysOnly { displays_result })
8✔
95
            }
96
            Commands::SpeakersOnly { speakers, shared } => {
9✔
97
                configure_logger(&shared.log_level)?;
9✔
98

99
                let speakers_result = self.speakers_settings.change_default_speaker(
9✔
100
                    &speakers.desktop_speaker_name,
9✔
101
                    &speakers.couch_speaker_name,
9✔
102
                )?;
6✔
103

104
                Ok(ApplicationResult::SpeakersOnly { speakers_result })
3✔
105
            }
106
        }
107
    }
36✔
108
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc