aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_project_model/src/workspace_error.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_project_model/src/workspace_error.rs')
-rw-r--r--crates/ra_project_model/src/workspace_error.rs57
1 files changed, 57 insertions, 0 deletions
diff --git a/crates/ra_project_model/src/workspace_error.rs b/crates/ra_project_model/src/workspace_error.rs
new file mode 100644
index 000000000..5f7384968
--- /dev/null
+++ b/crates/ra_project_model/src/workspace_error.rs
@@ -0,0 +1,57 @@
1//! Workspace-related errors
2
3use std::{error::Error, fmt, io, path::PathBuf, string::FromUtf8Error};
4
5use ra_db::ParseEditionError;
6
7#[derive(Debug)]
8pub enum WorkspaceError {
9 CargoMetadataFailed(cargo_metadata::Error),
10 CargoTomlNotFound(PathBuf),
11 NoStdLib(PathBuf),
12 OpenWorkspaceError(io::Error),
13 ParseEditionError(ParseEditionError),
14 ReadWorkspaceError(serde_json::Error),
15 RustcCfgError,
16 RustcError(io::Error),
17 RustcOutputError(FromUtf8Error),
18 SysrootNotFound,
19}
20
21impl fmt::Display for WorkspaceError {
22 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
23 match self {
24 Self::OpenWorkspaceError(err) | Self::RustcError(err) => write!(f, "{}", err),
25 Self::ParseEditionError(err) => write!(f, "{}", err),
26 Self::ReadWorkspaceError(err) => write!(f, "{}", err),
27 Self::RustcOutputError(err) => write!(f, "{}", err),
28 Self::CargoMetadataFailed(err) => write!(f, "cargo metadata failed: {}", err),
29 Self::RustcCfgError => write!(f, "failed to get rustc cfgs"),
30 Self::SysrootNotFound => write!(f, "failed to locate sysroot"),
31 Self::CargoTomlNotFound(path) => {
32 write!(f, "can't find Cargo.toml at {}", path.display())
33 }
34 Self::NoStdLib(sysroot) => write!(
35 f,
36 "can't load standard library from sysroot\n\
37 {:?}\n\
38 try running `rustup component add rust-src` or set `RUST_SRC_PATH`",
39 sysroot,
40 ),
41 }
42 }
43}
44
45impl From<ParseEditionError> for WorkspaceError {
46 fn from(err: ParseEditionError) -> Self {
47 Self::ParseEditionError(err.into())
48 }
49}
50
51impl From<cargo_metadata::Error> for WorkspaceError {
52 fn from(err: cargo_metadata::Error) -> Self {
53 Self::CargoMetadataFailed(err.into())
54 }
55}
56
57impl Error for WorkspaceError {}