From 24cb7a5e07518129e0bf839cf2b1654a0ed8bd0e Mon Sep 17 00:00:00 2001 From: Dirk Van Haerenborgh Date: Thu, 22 Mar 2018 08:55:48 +0100 Subject: create query --- src/database.rs | 17 +++++++++++++++-- src/lib.rs | 3 +++ src/query.rs | 29 +++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 src/query.rs (limited to 'src') diff --git a/src/database.rs b/src/database.rs index a809e3d..986d638 100644 --- a/src/database.rs +++ b/src/database.rs @@ -15,6 +15,7 @@ use utils::{ }; use directory::Directory; +use query::Query; use ffi; @@ -31,7 +32,7 @@ pub struct Revision(libc::c_ulong); pub struct Database(*mut ffi::notmuch_database_t); impl Database { - pub fn create>(path: &P) -> Result { + pub fn create>(path: &P) -> Result { let path_str = CString::new(path.as_ref().to_str().unwrap()).unwrap(); let mut db = ptr::null_mut(); @@ -42,7 +43,7 @@ impl Database { Ok(Database(db)) } - pub fn open>(path: &P, mode: DatabaseMode) -> Result { + pub fn open>(path: &P, mode: DatabaseMode) -> Result { let path_str = CString::new(path.as_ref().to_str().unwrap()).unwrap(); let mut db = ptr::null_mut(); @@ -184,6 +185,18 @@ impl Database { true => Ok(Some(Directory::new(dir))), } } + + pub fn create_query(&self, query_string: &String) -> Result { + let query_str = CString::new(query_string.as_str()).unwrap(); + + let mut query = ptr::null_mut(); + unsafe { + query = ffi::notmuch_query_create(self.0, query_str.as_ptr()); + } + + Ok(Query(query)) + } + } impl ops::Drop for Database { diff --git a/src/lib.rs b/src/lib.rs index 7ee28ac..4dd635e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -9,6 +9,9 @@ mod ffi; pub mod error; pub mod database; pub mod directory; +pub mod query; pub use database::Database; +pub use query::Query; + pub use ffi::DatabaseMode; diff --git a/src/query.rs b/src/query.rs new file mode 100644 index 0000000..364c001 --- /dev/null +++ b/src/query.rs @@ -0,0 +1,29 @@ +use std::{ + ops, + path, + ptr, +}; + +use std::ffi::CString; +use std::os::raw::c_char; + +use libc; + +use error::Result; +use utils::{ + NewFromPtr, + ToStr, +}; + +use ffi; + +use database::Database; + +#[derive(Debug)] +pub struct Query(pub(crate) *mut ffi::notmuch_query_t); + +impl Query { + pub fn create(db: &Database, query_string: &String) -> Result { + db.create_query(query_string) + } +} -- cgit v1.2.1