cli_support/
lib.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#![allow(unknown_lints)]
#![warn(rust_2018_idioms)]

use std::path::{Path, PathBuf};

pub mod fxa_creds;
pub mod prompt;

pub use env_logger;

pub fn init_logging_with(s: &str) {
    let noisy = "tokio_threadpool=warn,tokio_reactor=warn,tokio_core=warn,tokio=warn,hyper=warn,want=warn,mio=warn,reqwest=warn";
    let spec = format!("{},{}", s, noisy);
    env_logger::init_from_env(env_logger::Env::default().filter_or("RUST_LOG", spec));
}

pub fn init_trace_logging() {
    init_logging_with("trace")
}

pub fn init_logging() {
    init_logging_with(if cfg!(debug_assertions) {
        "debug"
    } else {
        "info"
    })
}

pub fn cli_data_dir() -> String {
    data_path(None).to_string_lossy().to_string()
}

pub fn cli_data_subdir(relative_path: &str) -> String {
    data_path(Some(relative_path)).to_string_lossy().to_string()
}

pub fn cli_data_path(filename: &str) -> String {
    data_path(None).join(filename).to_string_lossy().to_string()
}

fn data_path(relative_path: Option<&str>) -> PathBuf {
    let dir = workspace_root_dir().join(".cli-data");
    let dir = match relative_path {
        None => dir,
        Some(relative_path) => dir.join(relative_path),
    };
    std::fs::create_dir_all(&dir).expect("Error creating dir {dir:?}");
    dir
}

pub fn workspace_root_dir() -> PathBuf {
    let cargo_output = std::process::Command::new(env!("CARGO"))
        .arg("locate-project")
        .arg("--workspace")
        .arg("--message-format=plain")
        .output()
        .unwrap()
        .stdout;
    let cargo_toml_path = Path::new(std::str::from_utf8(&cargo_output).unwrap().trim());
    cargo_toml_path.parent().unwrap().to_path_buf()
}