taubyte_sdk/database/
new.rs1use 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}