diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-18 05:39:07 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-18 05:39:07 +0000 |
commit | af6b8ed095f88f1df2116cdc7a9d44872cfa6074 (patch) | |
tree | 1f2df671c1f8033d5ed83f056167a0911f8d2a57 /src/bindgen/error.rs | |
parent | Initial commit. (diff) | |
download | rust-cbindgen-af6b8ed095f88f1df2116cdc7a9d44872cfa6074.tar.xz rust-cbindgen-af6b8ed095f88f1df2116cdc7a9d44872cfa6074.zip |
Adding upstream version 0.26.0.upstream/0.26.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/bindgen/error.rs')
-rw-r--r-- | src/bindgen/error.rs | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/bindgen/error.rs b/src/bindgen/error.rs new file mode 100644 index 0000000..e4002f6 --- /dev/null +++ b/src/bindgen/error.rs @@ -0,0 +1,88 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +use std::error; +use std::fmt; + +pub use crate::bindgen::cargo::cargo_expand::Error as CargoExpandError; +pub use crate::bindgen::cargo::cargo_metadata::Error as CargoMetadataError; +pub use crate::bindgen::cargo::cargo_toml::Error as CargoTomlError; +pub use syn::parse::Error as ParseError; + +#[derive(Debug)] +#[allow(clippy::enum_variant_names)] +pub enum Error { + CargoMetadata(String, CargoMetadataError), + CargoToml(String, CargoTomlError), + CargoExpand(String, CargoExpandError), + ParseSyntaxError { + crate_name: String, + src_path: String, + error: ParseError, + }, + ParseCannotOpenFile { + crate_name: String, + src_path: String, + }, +} + +impl fmt::Display for Error { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match *self { + Error::CargoMetadata(ref path, ref error) => write!( + f, + "Couldn't execute `cargo metadata` with manifest {:?}: {:?}", + path, error + ), + Error::CargoToml(ref path, ref error) => { + write!(f, "Couldn't load manifest file {:?}: {:?}", path, error) + } + Error::CargoExpand(ref crate_name, ref error) => write!( + f, + "Parsing crate `{}`: couldn't run `cargo rustc -Zunpretty=expanded`: {:?}", + crate_name, error + ), + Error::ParseSyntaxError { + ref crate_name, + ref src_path, + ref error, + } => { + write!( + f, + "Parsing crate `{}`:`{}`:\n{:?}", + crate_name, src_path, error + )?; + + if !src_path.is_empty() { + write!( + f, + "\nTry running `rustc -Z parse-only {}` to see a nicer error message", + src_path, + )? + } + Ok(()) + } + Error::ParseCannotOpenFile { + ref crate_name, + ref src_path, + } => write!( + f, + "Parsing crate `{}`: cannot open file `{}`.", + crate_name, src_path + ), + } + } +} + +impl error::Error for Error { + fn source(&self) -> Option<&(dyn error::Error + 'static)> { + match self { + Error::CargoMetadata(_, ref error) => Some(error), + Error::CargoToml(_, ref error) => Some(error), + Error::CargoExpand(_, ref error) => Some(error), + Error::ParseSyntaxError { ref error, .. } => Some(error), + Error::ParseCannotOpenFile { .. } => None, + } + } +} |