aboutsummaryrefslogtreecommitdiffstats
path: root/src/ffi.rs
diff options
context:
space:
mode:
authorC. Morgan Hamill <me@cmhamill.org>2015-03-17 15:20:15 +0100
committerC. Morgan Hamill <me@cmhamill.org>2015-03-17 15:20:15 +0100
commita0f345202299b5f5214f1a791e896376e6cb7a04 (patch)
tree450ee375ea925bb9c747dcce4bf89b034be88614 /src/ffi.rs
parent8d22f9ea2d316889a529ea7a5526dcc23a12cfb1 (diff)
downloadmail-a0f345202299b5f5214f1a791e896376e6cb7a04.tar.gz
Add notmuch C API bindings.
The ffi module now reproduces the notmuch C API, as defined in `notmuch.h`, more-or-less verbatim.
Diffstat (limited to 'src/ffi.rs')
-rw-r--r--src/ffi.rs427
1 files changed, 427 insertions, 0 deletions
diff --git a/src/ffi.rs b/src/ffi.rs
index fa541d6..dba98b5 100644
--- a/src/ffi.rs
+++ b/src/ffi.rs
@@ -1,3 +1,430 @@
#![allow(dead_code, non_camel_case_types)]
//! Re-presentation of the notmuch C API.
+
+use libc::{
+ c_char,
+ c_double,
+ c_int,
+ c_uint,
+ c_void,
+ time_t,
+};
+
+pub type notmuch_bool_t = c_int;
+
+pub type notmuch_compact_status_cb_t = extern fn(*const c_char, *mut c_void);
+
+#[repr(C)]
+#[derive(Copy, Debug)]
+pub enum notmuch_status_t {
+ NOTMUCH_STATUS_SUCCESS = 0,
+ NOTMUCH_STATUS_OUT_OF_MEMORY,
+ NOTMUCH_STATUS_READ_ONLY_DATABASE,
+ NOTMUCH_STATUS_XAPIAN_EXCEPTION,
+ NOTMUCH_STATUS_FILE_ERROR,
+ NOTMUCH_STATUS_FILE_NOT_EMAIL,
+ NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID,
+ NOTMUCH_STATUS_NULL_POINTER,
+ NOTMUCH_STATUS_TAG_TOO_LONG,
+ NOTMUCH_STATUS_UNBALANCED_FREEZE_THAW,
+ NOTMUCH_STATUS_UNBALANCED_ATOMIC,
+ NOTMUCH_STATUS_UNSUPPORTED_OPERATION,
+ NOTMUCH_STATUS_UPGRADE_REQUIRED,
+ // Not an actual status value. Just a way to find out how many
+ // valid status values there are.
+ NOTMUCH_STATUS_LAST_STATUS,
+}
+
+#[repr(C)]
+#[derive(Copy, Debug)]
+pub enum notmuch_database_mode_t {
+ NOTMUCH_DATABASE_MODE_READ_ONLY = 0,
+ NOTMUCH_DATABASE_MODE_READ_WRITE,
+}
+
+#[repr(C)]
+#[derive(Copy, Debug)]
+pub enum notmuch_sort_t {
+ NOTMUCH_SORT_OLDEST_FIRST = 0,
+ NOTMUCH_SORT_NEWEST_FIRST,
+ NOTMUCH_SORT_MESSAGE_ID,
+ NOTMUCH_SORT_UNSORTED,
+}
+
+#[repr(C)]
+#[derive(Copy, Debug)]
+pub enum notmuch_exclude_t {
+ NOTMUCH_EXCLUDE_FLAG = 0,
+ NOTMUCH_EXCLUDE_TRUE,
+ NOTMUCH_EXCLUDE_FALSE,
+ NOTMUCH_EXCLUDE_ALL,
+}
+
+#[repr(C)]
+#[derive(Copy, Debug)]
+pub enum notmuch_message_flag_t {
+ NOTMUCH_MESSAGE_FLAG_MATCH = 0,
+ NOTMUCH_MESSAGE_FLAG_EXCLUDED,
+ NOTMUCH_MESSAGE_FLAG_GHOST,
+}
+
+#[repr(C)] pub struct notmuch_database_t;
+#[repr(C)] pub struct notmuch_query_t;
+#[repr(C)] pub struct notmuch_threads_t;
+#[repr(C)] pub struct notmuch_thread_t;
+#[repr(C)] pub struct notmuch_messages_t;
+#[repr(C)] pub struct notmuch_message_t;
+#[repr(C)] pub struct notmuch_tags_t;
+#[repr(C)] pub struct notmuch_directory_t;
+#[repr(C)] pub struct notmuch_filenames_t;
+
+#[link(name = "notmuch")]
+extern {
+ pub fn notmuch_status_to_string(
+ status: notmuch_status_t,
+ ) -> *const c_char;
+
+ pub fn notmuch_database_create(
+ path: *const c_char,
+ database: *mut *mut notmuch_database_t,
+ ) -> notmuch_status_t;
+
+ pub fn notmuch_database_open(
+ path: *const c_char,
+ mode: notmuch_database_mode_t,
+ database: *mut *mut notmuch_database_t,
+ ) -> notmuch_status_t;
+
+ pub fn notmuch_database_close(
+ database: *mut notmuch_database_t,
+ ) -> notmuch_status_t;
+
+ pub fn notmuch_database_compact(
+ path: *const c_char,
+ backup_path: *const c_char,
+ status_cb: Option<notmuch_compact_status_cb_t>,
+ closure: *mut c_void,
+ ) -> notmuch_status_t;
+
+ pub fn notmuch_database_destroy(
+ database: *mut notmuch_database_t,
+ ) -> notmuch_status_t;
+
+ pub fn notmuch_database_get_path(
+ database: *mut notmuch_database_t,
+ ) -> *const c_char;
+
+ pub fn notmuch_database_get_version(
+ database: *mut notmuch_database_t,
+ ) -> c_uint;
+
+ pub fn notmuch_database_needs_upgrade(
+ database: *mut notmuch_database_t,
+ ) -> notmuch_bool_t;
+
+ pub fn notmuch_database_upgrade(
+ database: *mut notmuch_database_t,
+ progress_notify: Option<extern fn(*mut c_void, c_double)>,
+ closure: *mut c_void,
+ ) -> notmuch_status_t;
+
+ pub fn notmuch_database_begin_atomic(
+ notmuch: *mut notmuch_database_t,
+ ) -> notmuch_status_t;
+
+ pub fn notmuch_database_end_atomic(
+ notmuch: *mut notmuch_database_t,
+ ) -> notmuch_status_t;
+
+ pub fn notmuch_database_get_directory(
+ database: *mut notmuch_database_t,
+ path: *const c_char,
+ directory: *mut *mut notmuch_directory_t,
+ ) -> notmuch_status_t;
+
+ pub fn notmuch_database_add_message(
+ database: *mut notmuch_database_t,
+ filename: *const c_char,
+ message: *mut *mut notmuch_message_t,
+ ) -> notmuch_status_t;
+
+ pub fn notmuch_database_remove_message(
+ database: *mut notmuch_database_t,
+ filename: *const c_char,
+ ) -> notmuch_status_t;
+
+ pub fn notmuch_database_find_message(
+ database: *mut notmuch_database_t,
+ message_id: *const c_char,
+ message: *mut *mut notmuch_message_t,
+ ) -> notmuch_status_t;
+
+ pub fn notmuch_database_find_message_by_filename(
+ database: *mut notmuch_database_t,
+ filename: *const c_char,
+ message: *mut *mut notmuch_message_t,
+ ) -> notmuch_status_t;
+
+ pub fn notmuch_database_get_all_tags(
+ db: *mut notmuch_database_t,
+ ) -> *mut notmuch_tags_t;
+
+ pub fn notmuch_query_create(
+ database: *mut notmuch_database_t,
+ query_string: *const c_char,
+ ) -> *mut notmuch_query_t;
+
+ pub fn notmuch_query_get_string(
+ query: *mut notmuch_query_t,
+ ) -> *const c_char;
+
+ pub fn notmuch_query_set_omit_excluded(
+ query: *mut notmuch_query_t,
+ omit_excluded: notmuch_exclude_t,
+ );
+
+ pub fn notmuch_query_set_sort(
+ query: *mut notmuch_query_t,
+ sort: notmuch_sort_t,
+ );
+
+ pub fn notmuch_query_get_sort(
+ query: *mut notmuch_query_t,
+ ) -> notmuch_sort_t;
+
+ pub fn notmuch_query_add_tag_exclude(
+ query: *mut notmuch_query_t,
+ tag: *const c_char,
+ );
+
+ pub fn notmuch_query_search_threads(
+ query: *mut notmuch_query_t,
+ ) -> *mut notmuch_threads_t;
+
+ pub fn notmuch_query_search_messages(
+ query: *mut notmuch_query_t,
+ ) -> *mut notmuch_messages_t;
+
+ pub fn notmuch_query_destroy(
+ query: *mut notmuch_query_t,
+ );
+
+ pub fn notmuch_threads_valid(
+ threads: *mut notmuch_threads_t,
+ ) -> notmuch_bool_t;
+
+ pub fn notmuch_threads_get(
+ threads: *mut notmuch_threads_t,
+ ) -> *mut notmuch_thread_t;
+
+ pub fn notmuch_threads_move_to_next(
+ threads: *mut notmuch_threads_t,
+ );
+
+ pub fn notmuch_threads_destroy(
+ threads: *mut notmuch_threads_t,
+ );
+
+ pub fn notmuch_query_count_messages(
+ query: *mut notmuch_query_t,
+ ) -> c_uint;
+
+ pub fn notmuch_count_threads(
+ query: *mut notmuch_query_t,
+ ) -> c_uint;
+
+ pub fn notmuch_thread_get_thread_id(
+ thread: *mut notmuch_thread_t,
+ ) -> *const c_char;
+
+ pub fn notmuch_thread_get_total_messages(
+ thread: *mut notmuch_thread_t,
+ ) -> c_int;
+
+ pub fn notmuch_thread_get_toplevel_messages(
+ thread: *mut notmuch_thread_t,
+ ) -> *mut notmuch_messages_t;
+
+ pub fn notmuch_thread_get_messages(
+ thread: *mut notmuch_thread_t,
+ ) -> *mut notmuch_messages_t;
+
+ pub fn notmuch_thread_get_matched_messages(
+ thread: *mut notmuch_thread_t,
+ ) -> c_int;
+
+ pub fn notmuch_thread_get_authors(
+ thread: *mut notmuch_thread_t,
+ ) -> *const c_char;
+
+ pub fn notmuch_thread_get_subject(
+ thread: *mut notmuch_thread_t,
+ ) -> *const c_char;
+
+ pub fn notmuch_thread_get_oldest_date(
+ thread: *mut notmuch_thread_t,
+ ) -> time_t;
+
+ pub fn notmuch_thread_get_newest_date(
+ thread: *mut notmuch_thread_t,
+ ) -> time_t;
+
+ pub fn notmuch_thread_get_tags(
+ thread: *mut notmuch_thread_t,
+ ) -> *mut notmuch_tags_t;
+
+ pub fn notmuch_thread_destroy(
+ thread: *mut notmuch_thread_t,
+ );
+
+ pub fn notmuch_messages_valid(
+ messages: *mut notmuch_messages_t,
+ ) -> notmuch_bool_t;
+
+ pub fn notmuch_messages_get(
+ messages: *mut notmuch_messages_t,
+ ) -> *mut notmuch_message_t;
+
+ pub fn notmuch_messages_move_to_next(
+ messages: *mut notmuch_messages_t,
+ );
+
+ pub fn notmuch_messages_destroy(
+ messages: *mut notmuch_messages_t,
+ );
+
+ pub fn notmuch_messages_collect_tags(
+ messages: *mut notmuch_messages_t,
+ ) -> *mut notmuch_tags_t;
+
+ pub fn notmuch_message_get_message_id(
+ message: *mut notmuch_message_t,
+ ) -> *const c_char;
+
+ pub fn notmuch_message_get_thread_id(
+ message: *mut notmuch_message_t,
+ ) -> *const c_char;
+
+ pub fn notmuch_message_get_replies(
+ message: *mut notmuch_message_t,
+ ) -> *mut notmuch_messages_t;
+
+ pub fn notmuch_message_get_filename(
+ message: *mut notmuch_message_t,
+ ) -> *const c_char;
+
+ pub fn notmuch_message_get_filenames(
+ message: *mut notmuch_message_t,
+ ) -> *mut notmuch_filenames_t;
+
+ pub fn notmuch_message_get_flag(
+ message: *mut notmuch_message_t,
+ flag: notmuch_message_flag_t,
+ ) -> notmuch_bool_t;
+
+ pub fn notmuch_message_set_flag(
+ message: *mut notmuch_message_t,
+ flag: notmuch_message_flag_t,
+ value: notmuch_bool_t,
+ );
+
+ pub fn notmuch_message_get_date(
+ message: *mut notmuch_message_t,
+ ) -> time_t;
+
+ pub fn notmuch_message_get_header(
+ message: *mut notmuch_message_t,
+ header: *const c_char,
+ ) -> *const c_char;
+
+ pub fn notmuch_message_get_tags(
+ message: *mut notmuch_message_t,
+ ) -> *mut notmuch_tags_t;
+
+ pub fn notmuch_message_add_tag(
+ message: *mut notmuch_message_t,
+ tag: *const c_char,
+ ) -> notmuch_status_t;
+
+ pub fn notmuch_message_remove_tag(
+ message: *mut notmuch_message_t,
+ tag: *const c_char,
+ ) -> notmuch_status_t;
+
+ pub fn notmuch_message_remove_all_tags(
+ message: *mut notmuch_message_t,
+ ) -> notmuch_status_t;
+
+ pub fn notmuch_message_maildir_flags_to_tags(
+ message: *mut notmuch_message_t,
+ ) -> notmuch_status_t;
+
+ pub fn notmuch_message_tags_to_maildir_flags(
+ message: *mut notmuch_message_t,
+ ) -> notmuch_status_t;
+
+ pub fn notmuch_message_freeze(
+ message: *mut notmuch_message_t,
+ ) -> notmuch_status_t;
+
+ pub fn notmuch_message_thaw(
+ message: *mut notmuch_message_t,
+ ) -> notmuch_status_t;
+
+ pub fn notmuch_message_destroy(
+ message: *mut notmuch_message_t,
+ );
+
+ pub fn notmuch_tags_valid(
+ tags: *mut notmuch_tags_t,
+ ) -> notmuch_bool_t;
+
+ pub fn notmuch_tags_get(
+ tags: *mut notmuch_tags_t,
+ ) -> *const c_char;
+
+ pub fn notmuch_tags_move_to_next(
+ tags: *mut notmuch_tags_t,
+ );
+
+ pub fn notmuch_tags_destroy(
+ tags: *mut notmuch_tags_t,
+ );
+
+ pub fn notmuch_directory_set_mtime(
+ directory: *mut notmuch_directory_t,
+ ) -> notmuch_status_t;
+
+ pub fn notmuch_directory_get_mtime(
+ directory: *mut notmuch_directory_t,
+ ) -> time_t;
+
+ pub fn notmuch_directory_get_child_files(
+ directory: *mut notmuch_directory_t,
+ ) -> *mut notmuch_filenames_t;
+
+ pub fn notmuch_directory_get_child_directories(
+ directory: *mut notmuch_directory_t,
+ ) -> *mut notmuch_filenames_t;
+
+ pub fn notmuch_directory_destroy(
+ directory: *mut notmuch_directory_t,
+ );
+
+ pub fn notmuch_filenames_valid(
+ filenames: *mut notmuch_filenames_t,
+ ) -> notmuch_bool_t;
+
+ pub fn notmuch_filenames_get(
+ filenames: *mut notmuch_filenames_t,
+ ) -> *const c_char;
+
+ pub fn notmuch_filenames_move_to_next(
+ filenames: *mut notmuch_filenames_t,
+ );
+
+ pub fn notmuch_filenames_destroy(
+ filenames: *mut notmuch_filenames_t,
+ );
+}