(file: &PathBuf, cli: &Cli)
| 126 | } |
| 127 | |
| 128 | pub(crate) async fn load_file<T>(file: &PathBuf, cli: &Cli) -> Vec<T> |
| 129 | where |
| 130 | T: Send + for<'de> serde::Deserialize<'de> + 'static, |
| 131 | { |
| 132 | let file_clone = file.clone(); |
| 133 | let cli_clone = cli.clone(); |
| 134 | |
| 135 | let result = task::spawn_blocking(move || { |
| 136 | if file_clone.to_string_lossy() == "-" { |
| 137 | serde_json::from_reader(std::io::stdin()).unwrap_or_die(&cli_clone) |
| 138 | } else { |
| 139 | serde_json::from_reader(std::fs::File::open(&file_clone).unwrap_or_die(&cli_clone)) |
| 140 | .unwrap_or_die(&cli_clone) |
| 141 | } |
| 142 | }) |
| 143 | .await |
| 144 | .unwrap_or_die(cli); |
| 145 | |
| 146 | match result { |
| 147 | OneOrMany::One(x) => vec![x], |
| 148 | OneOrMany::Many(x) => x, |
| 149 | } |
| 150 | } |
| 151 | |
| 152 | pub(crate) async fn clear_auth_token() { |
| 153 | if let Some(auth_file) = |
no test coverage detected