diff options
| author | Dirk Van Haerenborgh <vhdirk@gmail.com> | 2018-03-22 08:55:48 +0100 |
|---|---|---|
| committer | Dirk Van Haerenborgh <vhdirk@gmail.com> | 2018-03-22 08:55:48 +0100 |
| commit | 24cb7a5e07518129e0bf839cf2b1654a0ed8bd0e (patch) | |
| tree | 7b0a70a6f5e603bce06a9812519635de07f3cf01 | |
| parent | 1a8e183ab11f644ba22ab7e0474551147a2bac34 (diff) | |
| download | mail-24cb7a5e07518129e0bf839cf2b1654a0ed8bd0e.tar.gz | |
create query
| -rw-r--r-- | Cargo.toml | 2 | ||||
| -rw-r--r-- | src/database.rs | 17 | ||||
| -rw-r--r-- | src/lib.rs | 3 | ||||
| -rw-r--r-- | src/query.rs | 29 |
4 files changed, 48 insertions, 3 deletions
@@ -1,6 +1,6 @@ [package] name = "notmuch" -version = "0.0.2" +version = "0.0.3" authors = ["C. Morgan Hamill <me@cmhamill.org>", "Dirk Van Haerenborgh <vhdirk@gmail.com>"] 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<P: AsRef<path::Path>>(path: &P) -> Result<Database> { + pub fn create<P: AsRef<path::Path>>(path: &P) -> Result<Self> { 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<P: AsRef<path::Path>>(path: &P, mode: DatabaseMode) -> Result<Database> { + pub fn open<P: AsRef<path::Path>>(path: &P, mode: DatabaseMode) -> Result<Self> { 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<Query> { + 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 { @@ -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<Self> { + db.create_query(query_string) + } +} |
