aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDirk Van Haerenborgh <vhdirk@gmail.com>2018-03-22 08:55:48 +0100
committerDirk Van Haerenborgh <vhdirk@gmail.com>2018-03-22 08:55:48 +0100
commit24cb7a5e07518129e0bf839cf2b1654a0ed8bd0e (patch)
tree7b0a70a6f5e603bce06a9812519635de07f3cf01
parent1a8e183ab11f644ba22ab7e0474551147a2bac34 (diff)
downloadmail-24cb7a5e07518129e0bf839cf2b1654a0ed8bd0e.tar.gz
create query
-rw-r--r--Cargo.toml2
-rw-r--r--src/database.rs17
-rw-r--r--src/lib.rs3
-rw-r--r--src/query.rs29
4 files changed, 48 insertions, 3 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 7ef1354..0e0c7c3 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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 {
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)
+ }
+}