taubyte_sdk/database/
new.rs

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