numbat_wasm_debug/api/
log_api_mock.rs1use numbat_wasm::{
2 api::{Handle, LogApi},
3 types::{
4 managed_vec_of_buffers_to_arg_buffer, ArgBuffer, ManagedBuffer, ManagedType, ManagedVec,
5 },
6};
7
8use crate::{TxContext, TxLog};
9
10impl LogApi for TxContext {
13 fn write_event_log(&self, topics_buffer: &ArgBuffer, data: &[u8]) {
14 let arg_data_buffer = topics_buffer.arg_data();
15 let arg_data_lengths = topics_buffer.arg_lengths();
16
17 let mut current_index = 0;
18 let mut topics = Vec::new();
19
20 for arg_len in arg_data_lengths.iter() {
22 let topic = arg_data_buffer[current_index..(current_index + arg_len)].to_vec();
23 topics.push(topic);
24
25 current_index += arg_len;
26 }
27
28 let mut tx_output_cell = self.tx_output_cell.borrow_mut();
29 tx_output_cell.result.result_logs.push(TxLog {
30 address: self.tx_input_box.to.clone(),
31 endpoint: self.tx_input_box.func_name.clone(),
32 topics,
33 data: data.to_vec(),
34 });
35 }
36
37 fn write_legacy_log(&self, topics: &[[u8; 32]], data: &[u8]) {
38 let topics_vec = topics.iter().map(|array| array.to_vec()).collect();
39
40 let mut tx_output_cell = self.tx_output_cell.borrow_mut();
41 tx_output_cell.result.result_logs.push(TxLog {
42 address: self.tx_input_box.to.clone(),
43 endpoint: self.tx_input_box.func_name.clone(),
44 topics: topics_vec,
45 data: data.to_vec(),
46 });
47 }
48
49 fn managed_write_log(&self, topics_handle: Handle, data_handle: Handle) {
50 let topics = ManagedVec::from_raw_handle(self.clone(), topics_handle);
51 let topics_arg_buffer = managed_vec_of_buffers_to_arg_buffer(&topics);
52 let data = ManagedBuffer::from_raw_handle(self.clone(), data_handle);
53 self.write_event_log(&topics_arg_buffer, data.to_boxed_bytes().as_slice());
54 }
55}