Improve mapping error handling

feature/lookup-installed
trivernis 2 years ago
parent 7819312647
commit 203a211ee2
WARNING! Although there is a key with this ID in the database it does not verify this commit! This commit is SUSPICIOUS.
GPG Key ID: DFFFCC2C7A02DB45

@ -1,4 +1,4 @@
use std::io;
use std::{io, path::PathBuf};
use miette::Diagnostic;
use thiserror::Error;
@ -24,4 +24,12 @@ pub enum MapperError {
#[error("IO Error: {0}")]
Io(#[from] io::Error),
#[error("Failed to map directory {src:?}")]
DirMapping {
src: PathBuf,
#[source]
err: io::Error,
},
}

@ -1,5 +1,6 @@
use std::{
collections::HashSet,
io,
path::{Path, PathBuf},
};
@ -7,7 +8,7 @@ use tokio::fs::{self, DirEntry};
use crate::{consts::BIN_DIR, repository::node_path::NodePath};
use super::error::MapperResult;
use super::error::{MapperError, MapperResult};
struct NodeApp {
info: DirEntry,
@ -30,11 +31,13 @@ impl NodeApp {
/// creates wrappers to map this application
pub async fn map_executable(&self) -> MapperResult<()> {
let src_path = BIN_DIR.join(self.info.file_name());
self.write_wrapper_script(&src_path).await
self.write_wrapper_script(&src_path)
.await
.map_err(|err| MapperError::DirMapping { src: src_path, err })
}
#[cfg(not(target_os = "windows"))]
async fn write_wrapper_script(&self, path: &Path) -> MapperResult<()> {
async fn write_wrapper_script(&self, path: &Path) -> Result<(), io::Error> {
fs::write(path, format!("#!/bin/sh\nnenv exec {} \"$@\"", self.name)).await?;
let src_metadata = self.info.metadata().await?;
fs::set_permissions(&path, src_metadata.permissions()).await?;
@ -43,7 +46,7 @@ impl NodeApp {
}
#[cfg(target_os = "windows")]
async fn write_wrapper_script(&self, path: &Path) -> MapperResult<()> {
async fn write_wrapper_script(&self, path: &Path) -> Result<(), io::Error> {
fs::write(
path.with_extension("bat"),
format!("nenv exec {} %*", self.name),
@ -74,7 +77,12 @@ pub async fn map_node_bin(node_path: NodePath) -> MapperResult<()> {
async fn get_applications(path: &PathBuf) -> MapperResult<Vec<NodeApp>> {
let mut files = Vec::new();
let mut iter = fs::read_dir(path).await?;
let mut iter = fs::read_dir(path)
.await
.map_err(|err| MapperError::DirMapping {
src: path.to_owned(),
err,
})?;
while let Some(entry) = iter.next_entry().await? {
if entry.path().is_file() {

Loading…
Cancel
Save