aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/database.rs17
-rw-r--r--src/lib.rs3
-rw-r--r--src/query.rs29
3 files changed, 47 insertions, 2 deletions
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 {
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<Self> {
+ db.create_query(query_string)
+ }
+}