mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-04-23 14:15:24 +00:00
Tidy up SnapshotError a lot
This commit is contained in:
@@ -1,56 +1,62 @@
|
|||||||
use std::{error::Error, fmt, io, path::PathBuf};
|
use std::{io, path::PathBuf};
|
||||||
|
|
||||||
use snafu::Snafu;
|
use thiserror::Error;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug, Error)]
|
||||||
pub struct SnapshotError {
|
pub enum SnapshotError {
|
||||||
detail: SnapshotErrorDetail,
|
#[error("file name had malformed Unicode")]
|
||||||
path: Option<PathBuf>,
|
FileNameBadUnicode { path: PathBuf },
|
||||||
|
|
||||||
|
#[error("file had malformed Unicode contents")]
|
||||||
|
FileContentsBadUnicode {
|
||||||
|
source: std::str::Utf8Error,
|
||||||
|
path: PathBuf,
|
||||||
|
},
|
||||||
|
|
||||||
|
#[error("malformed project file")]
|
||||||
|
MalformedProject {
|
||||||
|
source: serde_json::Error,
|
||||||
|
path: PathBuf,
|
||||||
|
},
|
||||||
|
|
||||||
|
#[error("malformed .model.json file")]
|
||||||
|
MalformedModelJson {
|
||||||
|
source: serde_json::Error,
|
||||||
|
path: PathBuf,
|
||||||
|
},
|
||||||
|
|
||||||
|
#[error("malformed .meta.json file")]
|
||||||
|
MalformedMetaJson {
|
||||||
|
source: serde_json::Error,
|
||||||
|
path: PathBuf,
|
||||||
|
},
|
||||||
|
|
||||||
|
#[error(transparent)]
|
||||||
|
Io {
|
||||||
|
#[from]
|
||||||
|
source: io::Error,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SnapshotError {
|
impl SnapshotError {
|
||||||
pub fn new(detail: SnapshotErrorDetail, path: Option<impl Into<PathBuf>>) -> Self {
|
|
||||||
Self {
|
|
||||||
detail,
|
|
||||||
path: path.map(Into::into),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) fn wrap(source: impl Into<SnapshotErrorDetail>, path: impl Into<PathBuf>) -> Self {
|
|
||||||
Self {
|
|
||||||
detail: source.into(),
|
|
||||||
path: Some(path.into()),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) fn file_did_not_exist(path: impl Into<PathBuf>) -> Self {
|
|
||||||
Self {
|
|
||||||
detail: SnapshotErrorDetail::FileDidNotExist,
|
|
||||||
path: Some(path.into()),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) fn file_name_bad_unicode(path: impl Into<PathBuf>) -> Self {
|
pub(crate) fn file_name_bad_unicode(path: impl Into<PathBuf>) -> Self {
|
||||||
Self {
|
Self::FileNameBadUnicode { path: path.into() }
|
||||||
detail: SnapshotErrorDetail::FileNameBadUnicode,
|
|
||||||
path: Some(path.into()),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn file_contents_bad_unicode(
|
pub(crate) fn file_contents_bad_unicode(
|
||||||
source: std::str::Utf8Error,
|
source: std::str::Utf8Error,
|
||||||
path: impl Into<PathBuf>,
|
path: impl Into<PathBuf>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
Self {
|
Self::FileContentsBadUnicode {
|
||||||
detail: SnapshotErrorDetail::FileContentsBadUnicode { source },
|
source,
|
||||||
path: Some(path.into()),
|
path: path.into(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn malformed_project(source: serde_json::Error, path: impl Into<PathBuf>) -> Self {
|
pub(crate) fn malformed_project(source: serde_json::Error, path: impl Into<PathBuf>) -> Self {
|
||||||
Self {
|
Self::MalformedProject {
|
||||||
detail: SnapshotErrorDetail::MalformedProject { source },
|
source,
|
||||||
path: Some(path.into()),
|
path: path.into(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,82 +64,16 @@ impl SnapshotError {
|
|||||||
source: serde_json::Error,
|
source: serde_json::Error,
|
||||||
path: impl Into<PathBuf>,
|
path: impl Into<PathBuf>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
Self {
|
Self::MalformedModelJson {
|
||||||
detail: SnapshotErrorDetail::MalformedModelJson { source },
|
source,
|
||||||
path: Some(path.into()),
|
path: path.into(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn malformed_meta_json(source: serde_json::Error, path: impl Into<PathBuf>) -> Self {
|
pub(crate) fn malformed_meta_json(source: serde_json::Error, path: impl Into<PathBuf>) -> Self {
|
||||||
Self {
|
Self::MalformedMetaJson {
|
||||||
detail: SnapshotErrorDetail::MalformedMetaJson { source },
|
source,
|
||||||
path: Some(path.into()),
|
path: path.into(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Error for SnapshotError {
|
|
||||||
fn source(&self) -> Option<&(dyn Error + 'static)> {
|
|
||||||
self.detail.source()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl fmt::Display for SnapshotError {
|
|
||||||
fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
|
|
||||||
match &self.path {
|
|
||||||
Some(path) => write!(formatter, "{} in path {}", self.detail, path.display()),
|
|
||||||
None => write!(formatter, "{}", self.detail),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<io::Error> for SnapshotError {
|
|
||||||
fn from(inner: io::Error) -> Self {
|
|
||||||
Self::new(inner.into(), Option::<PathBuf>::None)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<rlua::Error> for SnapshotError {
|
|
||||||
fn from(error: rlua::Error) -> Self {
|
|
||||||
Self::new(error.into(), Option::<PathBuf>::None)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Snafu)]
|
|
||||||
pub enum SnapshotErrorDetail {
|
|
||||||
#[snafu(display("I/O error"))]
|
|
||||||
IoError { source: io::Error },
|
|
||||||
|
|
||||||
#[snafu(display("Lua error"))]
|
|
||||||
Lua { source: rlua::Error },
|
|
||||||
|
|
||||||
#[snafu(display("file did not exist"))]
|
|
||||||
FileDidNotExist,
|
|
||||||
|
|
||||||
#[snafu(display("file name had malformed Unicode"))]
|
|
||||||
FileNameBadUnicode,
|
|
||||||
|
|
||||||
#[snafu(display("file had malformed Unicode contents"))]
|
|
||||||
FileContentsBadUnicode { source: std::str::Utf8Error },
|
|
||||||
|
|
||||||
#[snafu(display("malformed project file"))]
|
|
||||||
MalformedProject { source: serde_json::Error },
|
|
||||||
|
|
||||||
#[snafu(display("malformed .model.json file"))]
|
|
||||||
MalformedModelJson { source: serde_json::Error },
|
|
||||||
|
|
||||||
#[snafu(display("malformed .meta.json file"))]
|
|
||||||
MalformedMetaJson { source: serde_json::Error },
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<io::Error> for SnapshotErrorDetail {
|
|
||||||
fn from(source: io::Error) -> Self {
|
|
||||||
SnapshotErrorDetail::IoError { source }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<rlua::Error> for SnapshotErrorDetail {
|
|
||||||
fn from(source: rlua::Error) -> Self {
|
|
||||||
SnapshotErrorDetail::Lua { source }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user