dropshot_api_manager/cmd/
check.rs1use crate::{
4 FAILURE_EXIT_CODE, NEEDS_UPDATE_EXIT_CODE,
5 apis::ManagedApis,
6 environment::{BlessedSource, GeneratedSource, ResolvedEnv},
7 output::{
8 CheckResult, OutputOpts, Styles, display_load_problems,
9 display_resolution, headers::*,
10 },
11 resolved::Resolved,
12};
13use std::process::ExitCode;
14
15impl CheckResult {
16 pub fn to_exit_code(self) -> ExitCode {
17 match self {
18 CheckResult::Success => ExitCode::SUCCESS,
19 CheckResult::NeedsUpdate => NEEDS_UPDATE_EXIT_CODE.into(),
20 CheckResult::Failures => FAILURE_EXIT_CODE.into(),
21 }
22 }
23}
24
25pub(crate) fn check_impl(
26 apis: &ManagedApis,
27 env: &ResolvedEnv,
28 blessed_source: &BlessedSource,
29 generated_source: &GeneratedSource,
30 output: &OutputOpts,
31) -> anyhow::Result<CheckResult> {
32 let mut styles = Styles::default();
33 if output.use_color(supports_color::Stream::Stderr) {
34 styles.colorize();
35 }
36
37 eprintln!("{:>HEADER_WIDTH$}", SEPARATOR);
38
39 let (generated, errors) = generated_source.load(apis, &styles)?;
40 display_load_problems(&errors, &styles)?;
41
42 let (local_files, errors) = env.local_source.load(apis, &styles)?;
43 display_load_problems(&errors, &styles)?;
44
45 let (blessed, errors) = blessed_source.load(apis, &styles)?;
46 display_load_problems(&errors, &styles)?;
47
48 let resolved = Resolved::new(env, apis, &blessed, &generated, &local_files);
49
50 eprintln!("{:>HEADER_WIDTH$}", SEPARATOR);
51 display_resolution(env, apis, &resolved, &styles)
52}