taubyte_sdk/database/
put.rs1use super::{imports, Database};
2use crate::errno::Error;
3
4impl Database {
5 fn put_unsafe(&self, key: &str, buf_ptr: *mut u8, buf_size: usize) -> Error {
6 #[allow(unused_unsafe)]
7 unsafe {
8 imports::databasePut(self.id, key.as_ptr(), key.len(), buf_ptr, buf_size)
9 }
10 }
11
12 pub fn put(&self, key: &str, value: &[u8]) -> Result<(), Box<dyn std::error::Error>> {
13 let err = self.put_unsafe(key, value.as_ptr() as *mut u8, value.len());
14 if err.is_err() {
15 Err(format!("Putting 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 pub static VALUE: &str = "a value";
27
28 #[test]
29 fn test_put() {
30 let database = Database::new(test::DATABASE_NAME).unwrap_or_else(|err| {
31 panic!("{}", err);
32 });
33
34 database.put(KEY, VALUE.as_bytes()).unwrap_or_else(|err| {
35 panic!("{}", err);
36 });
37 }
38}
39
40#[cfg(test)]
41#[allow(non_snake_case)]
42pub mod mock {
43 use super::test;
44 use crate::{
45 database::new::test as new_test,
46 errno::{Errno, Error},
47 utils::test as utils,
48 };
49
50 pub fn databasePut(
51 id: u32,
52 key_ptr: *const u8,
53 key_size: usize,
54 data: *mut u8,
55 data_size: usize,
56 ) -> Error {
57 let key = utils::read_string(key_ptr, key_size);
58
59 if id != new_test::DATABASE_ID {
60 Errno::ErrorCap.error()
61 } else if key != test::KEY {
62 Errno::ErrorCap.error()
63 } else {
64 assert_eq!(utils::read_bytes(data, data_size), test::VALUE.as_bytes());
65 Errno::ErrorNone.error()
66 }
67 }
68}