use crate::{err_msg, types::heap::BoxedBytes};
use super::{ErrorApiImpl, Handle};
pub trait EndpointArgumentApi {
type EndpointArgumentApiImpl: EndpointArgumentApiImpl;
fn argument_api_impl() -> Self::EndpointArgumentApiImpl;
}
pub trait EndpointArgumentApiImpl: ErrorApiImpl {
fn get_num_arguments(&self) -> i32;
fn check_num_arguments(&self, expected: i32) {
let nr_args = self.get_num_arguments();
if nr_args != expected {
self.signal_error(err_msg::ARG_WRONG_NUMBER.as_bytes());
}
}
fn get_argument_len(&self, arg_index: i32) -> usize;
fn copy_argument_to_slice(&self, arg_index: i32, slice: &mut [u8]);
fn get_argument_boxed_bytes(&self, arg_index: i32) -> BoxedBytes;
fn get_argument_big_int_raw(&self, arg_id: i32) -> Handle;
fn get_argument_big_uint_raw(&self, arg_id: i32) -> Handle;
fn get_argument_managed_buffer_raw(&self, arg_id: i32) -> Handle;
fn get_argument_u64(&self, arg_id: i32) -> u64;
fn get_argument_i64(&self, arg_id: i32) -> i64;
}