summaryrefslogtreecommitdiffstats
path: root/third_party/rust/bindgen/codegen/error.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/bindgen/codegen/error.rs')
-rw-r--r--third_party/rust/bindgen/codegen/error.rs33
1 files changed, 33 insertions, 0 deletions
diff --git a/third_party/rust/bindgen/codegen/error.rs b/third_party/rust/bindgen/codegen/error.rs
new file mode 100644
index 0000000000..c1bcf4e1cb
--- /dev/null
+++ b/third_party/rust/bindgen/codegen/error.rs
@@ -0,0 +1,33 @@
+use std::error;
+use std::fmt;
+
+/// Errors that can occur during code generation.
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub enum Error {
+ /// Tried to generate an opaque blob for a type that did not have a layout.
+ NoLayoutForOpaqueBlob,
+
+ /// Tried to instantiate an opaque template definition, or a template
+ /// definition that is too difficult for us to understand (like a partial
+ /// template specialization).
+ InstantiationOfOpaqueType,
+}
+
+impl fmt::Display for Error {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ f.write_str(match *self {
+ Error::NoLayoutForOpaqueBlob => {
+ "Tried to generate an opaque blob, but had no layout"
+ }
+ Error::InstantiationOfOpaqueType => {
+ "Instantiation of opaque template type or partial template \
+ specialization"
+ }
+ })
+ }
+}
+
+impl error::Error for Error {}
+
+/// A `Result` of `T` or an error of `bindgen::codegen::error::Error`.
+pub type Result<T> = ::std::result::Result<T, Error>;