diff options
Diffstat (limited to 'src/codegen/error.rs')
-rw-r--r-- | src/codegen/error.rs | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/codegen/error.rs b/src/codegen/error.rs new file mode 100644 index 00000000..ccb76c5b --- /dev/null +++ b/src/codegen/error.rs @@ -0,0 +1,41 @@ +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 { + write!(f, "{}", error::Error::description(self)) + } +} + +impl error::Error for Error { + fn cause(&self) -> Option<&error::Error> { + None + } + + fn description(&self) -> &'static 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" + } + } + } +} + +/// A `Result` of `T` or an error of `bindgen::codegen::error::Error`. +pub type Result<T> = ::std::result::Result<T, Error>; |