diff options
Diffstat (limited to 'crates/ra_project_model/src/workspace_error.rs')
-rw-r--r-- | crates/ra_project_model/src/workspace_error.rs | 57 |
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 | |||
3 | use std::{error::Error, fmt, io, path::PathBuf, string::FromUtf8Error}; | ||
4 | |||
5 | use ra_db::ParseEditionError; | ||
6 | |||
7 | #[derive(Debug)] | ||
8 | pub 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 | |||
21 | impl 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 | |||
45 | impl From<ParseEditionError> for WorkspaceError { | ||
46 | fn from(err: ParseEditionError) -> Self { | ||
47 | Self::ParseEditionError(err.into()) | ||
48 | } | ||
49 | } | ||
50 | |||
51 | impl From<cargo_metadata::Error> for WorkspaceError { | ||
52 | fn from(err: cargo_metadata::Error) -> Self { | ||
53 | Self::CargoMetadataFailed(err.into()) | ||
54 | } | ||
55 | } | ||
56 | |||
57 | impl Error for WorkspaceError {} | ||