#[cfg(test)]
#[path = "./types_test.rs"]
mod types_test;
#[cfg(feature = "encoding_rs")]
use encoding_rs::Encoding;
use fsio::error::FsIOError;
use std::error::Error;
use std::fmt;
use std::fmt::Display;
use std::io;
use std::path::PathBuf;
pub type ScriptResult<T> = Result<T, ScriptError>;
#[derive(Debug)]
pub enum ScriptError {
IOError(io::Error),
FsIOError(FsIOError),
Description(&'static str),
}
impl Display for ScriptError {
fn fmt(&self, format: &mut fmt::Formatter) -> Result<(), fmt::Error> {
match self {
Self::IOError(ref cause) => cause.fmt(format),
Self::FsIOError(ref cause) => cause.fmt(format),
Self::Description(description) => description.fmt(format),
}
}
}
impl Error for ScriptError {
fn source(&self) -> Option<&(dyn Error + 'static)> {
match self {
Self::Description(_) => None,
Self::IOError(error) => Some(error),
Self::FsIOError(error) => Some(error),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct ScriptOptions {
pub runner: Option<String>,
pub runner_args: Option<Vec<String>>,
pub working_directory: Option<PathBuf>,
pub input_redirection: IoOptions,
pub output_redirection: IoOptions,
pub exit_on_error: bool,
pub print_commands: bool,
pub env_vars: Option<std::collections::HashMap<String, String>>,
#[cfg(feature = "encoding_rs")]
pub encoding: Option<&'static Encoding>,
}
#[derive(Debug, Copy, Clone, PartialEq)]
pub enum IoOptions {
Null,
Pipe,
Inherit,
}
impl ScriptOptions {
pub fn new() -> ScriptOptions {
ScriptOptions {
runner: None,
runner_args: None,
working_directory: None,
input_redirection: IoOptions::Inherit,
output_redirection: IoOptions::Pipe,
exit_on_error: false,
print_commands: false,
env_vars: None,
#[cfg(feature = "encoding_rs")]
encoding: None,
}
}
}