diff --git a/src/error.rs b/src/error.rs index 3176fcf..a2afcc5 100644 --- a/src/error.rs +++ b/src/error.rs @@ -1,8 +1,30 @@ use ResultCode; +use std::convert::{From, Into}; + /// An error. #[derive(Debug)] pub struct Error { pub code: ResultCode, pub message: Option, } + +impl From for Error where T: Into { + #[inline] + fn from(message: T) -> Error { + Error { + code: ResultCode::Error, + message: Some(message.into()), + } + } +} + +impl From for Error { + #[inline] + fn from(code: ResultCode) -> Error { + Error { + code: code, + message: None, + } + } +} diff --git a/src/lib.rs b/src/lib.rs index 6319380..163e15d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,22 +3,15 @@ extern crate libc; extern crate sqlite3_sys as raw; -use std::path::Path; - macro_rules! raise( - ($message:expr) => ( - return Err(::Error { code: ::ResultCode::Error, message: Some($message.to_string()) }) - ); - ($code:expr, $message:expr) => ( - return Err(::Error { code: $code, message: $message }) - ); + ($message:expr) => (return Err(::Error::from($message))); ); macro_rules! success( ($result:expr) => ( match $result { ::raw::SQLITE_OK => {}, - code => raise!(::result::code_from_raw(code), None), + code => return Err(::Error::from(::result::code_from_raw(code))), } ); ); @@ -63,6 +56,6 @@ pub use statement::{Statement, Binding, Value}; /// Open a database. #[inline] -pub fn open(path: &Path) -> Result { +pub fn open(path: &std::path::Path) -> Result { Database::open(path) }