espup/
lib.rs

1pub mod cli;
2mod completion_shell;
3pub mod env;
4pub mod error;
5pub mod host_triple;
6pub mod targets;
7pub mod toolchain;
8
9pub mod logging {
10    use env_logger::{Builder, Env, WriteStyle};
11
12    use crate::toolchain::PROCESS_BARS;
13
14    /// Initializes the logger
15    pub fn initialize_logger(log_level: &str) {
16        let logger = Builder::from_env(Env::default().default_filter_or(log_level))
17            .format(|buf, record| {
18                use std::io::Write;
19                writeln!(
20                    buf,
21                    "[{}]: {}",
22                    record.level().to_string().to_lowercase(),
23                    record.args()
24                )
25            })
26            .write_style(WriteStyle::Always)
27            .build();
28        let level = logger.filter();
29        // make logging and process bar no longer mixed up
30        indicatif_log_bridge::LogWrapper::new(PROCESS_BARS.clone(), logger)
31            .try_init()
32            .unwrap();
33        log::set_max_level(level);
34    }
35}
36
37pub mod update {
38    use log::warn;
39    use std::time::Duration;
40    use update_informer::{Check, registry};
41
42    /// Check crates.io for a new version of the application
43    pub fn check_for_update(name: &str, version: &str) {
44        // By setting the interval to 0 seconds we invalidate the cache with each
45        // invocation and ensure we're getting up-to-date results
46        let informer =
47            update_informer::new(registry::Crates, name, version).interval(Duration::ZERO);
48
49        if let Some(version) = informer.check_version().ok().flatten() {
50            warn!("A new version of {name} ('{version}') is available");
51        }
52    }
53}