numbat_wasm_debug/api/
endpoint_finish_api_mock.rs

1use crate::TxContext;
2use numbat_wasm::api::{BigIntApi, EndpointFinishApi, Handle, ManagedBufferApi};
3use num_bigint::{BigInt, BigUint};
4
5/// Interface to only be used by code generated by the macros.
6/// The smart contract code doesn't have access to these methods directly.
7impl EndpointFinishApi for TxContext {
8    fn finish_slice_u8(&self, slice: &[u8]) {
9        let mut v = vec![0u8; slice.len()];
10        v.copy_from_slice(slice);
11        let mut tx_output = self.tx_output_cell.borrow_mut();
12        tx_output.result.result_values.push(v)
13    }
14
15    fn finish_big_int_raw(&self, handle: Handle) {
16        let bi_bytes = self.bi_get_signed_bytes(handle);
17        let mut tx_output = self.tx_output_cell.borrow_mut();
18        tx_output.result.result_values.push(bi_bytes.into_vec());
19    }
20
21    fn finish_big_uint_raw(&self, handle: Handle) {
22        let bu_bytes = self.bi_get_unsigned_bytes(handle);
23        let mut tx_output = self.tx_output_cell.borrow_mut();
24        tx_output.result.result_values.push(bu_bytes.into_vec());
25    }
26
27    fn finish_managed_buffer_raw(&self, handle: Handle) {
28        let bytes = self.mb_to_boxed_bytes(handle);
29        self.finish_slice_u8(bytes.as_slice());
30    }
31
32    fn finish_i64(&self, value: i64) {
33        if value == 0 {
34            self.finish_slice_u8(&[]);
35        } else {
36            self.finish_slice_u8(BigInt::from(value).to_signed_bytes_be().as_slice());
37        }
38    }
39
40    fn finish_u64(&self, value: u64) {
41        if value == 0 {
42            self.finish_slice_u8(&[]);
43        } else {
44            self.finish_slice_u8(BigUint::from(value).to_bytes_be().as_slice());
45        }
46    }
47}