nushell/src/errors.rs

72 lines
1.8 KiB
Rust
Raw Normal View History

2019-05-16 00:58:44 +02:00
#[allow(unused)]
use crate::prelude::*;
2019-05-28 04:01:37 +02:00
use serde_derive::Serialize;
2019-05-10 18:59:12 +02:00
use derive_new::new;
2019-05-28 04:01:37 +02:00
#[derive(Debug, Ord, PartialOrd, Eq, PartialEq, new, Clone, Serialize)]
2019-05-10 18:59:12 +02:00
pub struct ShellError {
title: String,
error: Value,
}
impl ShellError {
crate fn string(title: impl Into<String>) -> ShellError {
ShellError::new(title.into(), Value::nothing())
}
crate fn copy_error(&self) -> ShellError {
ShellError {
title: self.title.clone(),
error: self.error.copy(),
}
}
2019-05-16 23:43:36 +02:00
crate fn description(&self) -> String {
self.title.clone()
}
2019-05-10 18:59:12 +02:00
}
impl std::fmt::Display for ShellError {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "{}", &self.title)
}
}
impl std::error::Error for ShellError {}
impl std::convert::From<std::io::Error> for ShellError {
fn from(input: std::io::Error) -> ShellError {
ShellError {
title: format!("{}", input),
error: Value::nothing(),
2019-05-10 18:59:12 +02:00
}
}
}
2019-05-24 06:34:43 +02:00
impl std::convert::From<futures_sink::VecSinkError> for ShellError {
fn from(_input: futures_sink::VecSinkError) -> ShellError {
ShellError {
title: format!("Unexpected Vec Sink Error"),
error: Value::nothing(),
}
}
}
2019-05-24 09:29:16 +02:00
impl std::convert::From<subprocess::PopenError> for ShellError {
fn from(input: subprocess::PopenError) -> ShellError {
ShellError {
title: format!("{}", input),
error: Value::nothing(),
}
}
}
2019-05-26 08:54:41 +02:00
impl std::convert::From<nom::Err<(&str, nom::error::ErrorKind)>> for ShellError {
fn from(input: nom::Err<(&str, nom::error::ErrorKind)>) -> ShellError {
ShellError {
title: format!("{:?}", input),
error: Value::nothing(),
}
}
}