taubyte_sdk/database/
delete.rs

1use super::{imports, Database};
2use crate::errno::Error;
3
4impl Database {
5    fn delete_unsafe(&self, key: &str) -> Error {
6        #[allow(unused_unsafe)]
7        unsafe {
8            imports::databaseDelete(self.id, key.as_ptr(), key.len())
9        }
10    }
11
12    pub fn delete(&self, key: &str) -> Result<(), Box<dyn std::error::Error>> {
13        let err = self.delete_unsafe(key);
14        if err.is_err() {
15            Err(format!("Deleting database key: `{}` failed with: {}", key, err).into())
16        } else {
17            Ok(())
18        }
19    }
20}
21
22#[cfg(test)]
23pub mod test {
24    use crate::database::{new::test, Database};
25    pub static KEY: &str = "/test/v1";
26
27    #[test]
28    fn test_delete() {
29        let database = Database::new(test::DATABASE_NAME).unwrap_or_else(|err| {
30            panic!("{}", err);
31        });
32
33        database.delete(KEY).unwrap_or_else(|err| {
34            panic!("{}", err);
35        })
36    }
37}
38
39#[cfg(test)]
40#[allow(non_snake_case)]
41pub mod mock {
42    use super::test;
43    use crate::{
44        database::new::test as new_test,
45        errno::{Errno, Error},
46        utils::test as utils,
47    };
48
49    pub fn databaseDelete(id: u32, key_ptr: *const u8, key_size: usize) -> Error {
50        let key = utils::read_string(key_ptr, key_size);
51
52        if id != new_test::DATABASE_ID {
53            Errno::ErrorCap.error()
54        } else if key != test::KEY {
55            Errno::ErrorCap.error()
56        } else {
57            Errno::ErrorNone.error()
58        }
59    }
60}