diff --git a/.gitignore b/.gitignore index 2730dc9..9e2fadf 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ target Cargo.lock mongoc-sys/mongo-c-driver* ssl_env_vars +.idea/ \ No newline at end of file diff --git a/mongoc-sys/src/lib.rs b/mongoc-sys/src/lib.rs index 57cf709..38ec17b 100644 --- a/mongoc-sys/src/lib.rs +++ b/mongoc-sys/src/lib.rs @@ -102,6 +102,7 @@ pub mod bindings { pub fn mongoc_database_get_collection(database: *mut mongoc_database_t, name: *const ::libc::c_char) -> *mut mongoc_collection_t; pub fn mongoc_database_get_name(database: *mut mongoc_database_t) -> *const ::libc::c_char; pub fn mongoc_database_destroy(database: *mut mongoc_database_t) -> (); + pub fn mongoc_database_has_collection(database: *mut mongoc_database_t, name: *const ::libc::c_char, error: *mut bson_error_t) -> ::libc::boolean_t; } // Client diff --git a/src/database.rs b/src/database.rs index 6cb05af..18bdb1a 100644 --- a/src/database.rs +++ b/src/database.rs @@ -189,6 +189,31 @@ impl<'a> Database<'a> { }; String::from_utf8_lossy(cstr.to_bytes()) } + + /// Create a new collection in this database. + pub fn has_collection>>( + &self, + name: S + ) -> Result { + let mut error = BsoncError::empty(); + let name_cstring = CString::new(name).unwrap(); + + let has_collection = unsafe { + bindings::mongoc_database_has_collection( + self.inner, + name_cstring.as_ptr(), + error.mut_inner()) + }; + + if error.is_empty() { + Ok(match has_collection{ + 0 => false, + _ => true + }) + } else { + Err(error.into()) + } + } } impl<'a> Drop for Database<'a> {