use miette::Diagnostic;
use std::{io, path::PathBuf};
use thiserror::Error;
#[derive(Debug, Error, Diagnostic)]
pub enum IoError {
#[error("File or folder '{path}' does not exist")]
#[diagnostic(code(dotbak::error::io::not_found))]
NotFound {
path: PathBuf,
},
#[error("Error reading from file or folder '{path}': {source}")]
#[diagnostic(code(dotbak::error::io::read))]
Read {
path: PathBuf,
source: io::Error,
},
#[error("Error writing to file '{path}': {source}")]
#[diagnostic(code(dotbak::error::io::write))]
Write {
path: PathBuf,
source: io::Error,
},
#[error("Error creating file or folder '{path}': {source}")]
#[diagnostic(code(dotbak::error::io::create))]
Create {
path: PathBuf,
source: io::Error,
},
#[error("Error moving file or folder '{from}' to '{to}': {source}")]
#[diagnostic(code(dotbak::error::io::moving))]
Move {
from: PathBuf,
to: PathBuf,
source: io::Error,
},
#[error("Error creating symlink from '{from}' to '{to}': {source}")]
#[diagnostic(code(dotbak::error::io::symlink))]
Symlink {
from: PathBuf,
to: PathBuf,
source: io::Error,
},
#[error("Error deleting file '{path}': {source}")]
#[diagnostic(code(dotbak::error::io::delete))]
Delete {
path: PathBuf,
source: io::Error,
},
#[error("Error running command '{command} {}': {source}", args.join(" "))]
#[diagnostic(code(dotbak::error::git::arbitrary_command))]
CommandIO {
command: String,
args: Vec<String>,
source: io::Error,
},
#[error("Error running command '{command} {}':\n{stdout}{stderr}", args.join(" "))]
#[diagnostic(code(dotbak::error::git::arbitrary_command))]
CommandRun {
command: String,
args: Vec<String>,
stdout: String,
stderr: String,
},
}