drt_sc/api/
endpoint_arg_api.rs1use crate::{err_msg, types::heap::BoxedBytes};
2
3use super::{
4 const_handles, use_raw_handle, BigIntApiImpl, ErrorApi, ErrorApiImpl, HandleTypeInfo,
5 ManagedBufferApiImpl, ManagedTypeApi, ManagedTypeApiImpl,
6};
7
8pub trait EndpointArgumentApi: HandleTypeInfo {
9 type EndpointArgumentApiImpl: EndpointArgumentApiImpl
10 + HandleTypeInfo<
11 ManagedBufferHandle = Self::ManagedBufferHandle,
12 BigIntHandle = Self::BigIntHandle,
13 BigFloatHandle = Self::BigFloatHandle,
14 EllipticCurveHandle = Self::EllipticCurveHandle,
15 >;
16
17 fn argument_api_impl() -> Self::EndpointArgumentApiImpl;
18}
19
20pub trait EndpointArgumentApiImpl: ErrorApi + ManagedTypeApi {
23 fn get_num_arguments(&self) -> i32;
24
25 fn load_argument_managed_buffer(&self, arg_index: i32, dest: Self::ManagedBufferHandle);
26
27 fn get_argument_len(&self, arg_index: i32) -> usize {
28 let mbuf_temp_1: Self::ManagedBufferHandle =
29 use_raw_handle(const_handles::MBUF_TEMPORARY_1);
30 self.load_argument_managed_buffer(arg_index, mbuf_temp_1.clone());
31 Self::managed_type_impl().mb_len(mbuf_temp_1)
32 }
33
34 fn get_argument_boxed_bytes(&self, arg_index: i32) -> BoxedBytes {
35 let mbuf_temp_1: Self::ManagedBufferHandle =
36 use_raw_handle(const_handles::MBUF_TEMPORARY_1);
37 self.load_argument_managed_buffer(arg_index, mbuf_temp_1.clone());
38 Self::managed_type_impl().mb_to_boxed_bytes(mbuf_temp_1)
39 }
40
41 fn load_argument_big_int_unsigned(&self, arg_index: i32, dest: Self::BigIntHandle) {
42 let mbuf_temp_1: Self::ManagedBufferHandle =
43 use_raw_handle(const_handles::MBUF_TEMPORARY_1);
44 self.load_argument_managed_buffer(arg_index, mbuf_temp_1.clone());
45 Self::managed_type_impl().mb_to_big_int_unsigned(mbuf_temp_1, dest);
46 }
47
48 fn load_argument_big_int_signed(&self, arg_index: i32, dest: Self::BigIntHandle) {
49 let mbuf_temp_1: Self::ManagedBufferHandle =
50 use_raw_handle(const_handles::MBUF_TEMPORARY_1);
51 self.load_argument_managed_buffer(arg_index, mbuf_temp_1.clone());
52 Self::managed_type_impl().mb_to_big_int_signed(mbuf_temp_1, dest);
53 }
54
55 fn get_argument_u64(&self, arg_index: i32) -> u64 {
56 let big_int_temp_1: Self::BigIntHandle = use_raw_handle(const_handles::BIG_INT_TEMPORARY_1);
58 self.load_argument_big_int_unsigned(arg_index, big_int_temp_1.clone());
59 if let Some(value) = Self::managed_type_impl().bi_to_i64(big_int_temp_1) {
60 value as u64
61 } else {
62 Self::error_api_impl().signal_error(err_msg::ARG_OUT_OF_RANGE.as_bytes())
63 }
64 }
65
66 fn get_argument_i64(&self, arg_index: i32) -> i64 {
67 let big_int_temp_1: Self::BigIntHandle = use_raw_handle(const_handles::BIG_INT_TEMPORARY_1);
68 self.load_argument_big_int_signed(arg_index, big_int_temp_1.clone());
69 if let Some(value) = Self::managed_type_impl().bi_to_i64(big_int_temp_1) {
70 value
71 } else {
72 Self::error_api_impl().signal_error(err_msg::ARG_OUT_OF_RANGE.as_bytes())
73 }
74 }
75
76 fn load_callback_closure_buffer(&self, dest: Self::ManagedBufferHandle);
77}