use crate::api;
use crate::c;
use super::*;
#[inline(always)]
pub fn slot(slotted_obj: &mut [u8], slot_no: u32) -> Result<u64> {
buf_write_1arg(slotted_obj, slot_no, c::slot)
}
#[inline(always)]
pub fn slot_clear(slot_no: u32) -> Result<u64> {
api_1arg_call(slot_no, c::slot_clear)
}
#[inline(always)]
pub fn slot_count(slot_no: u32) -> Result<u64> {
api_1arg_call(slot_no, c::slot_count)
}
#[inline(always)]
pub fn slot_id(buf: &mut [u8], slot_no: u32) -> Result<u64> {
buf_write_1arg(buf, slot_no, c::slot_id)
}
#[inline(always)]
pub fn slot_set(keylet: &[u8], slot_no: u32) -> Result<u64> {
let res = unsafe { c::slot_set(keylet.as_ptr() as u32, keylet.len() as u32, slot_no) };
res.into()
}
#[inline(always)]
pub fn slot_size(slot_no: u32) -> Result<u64> {
api_1arg_call(slot_no, c::slot_size)
}
#[inline(always)]
pub fn slot_subarray(parent_slot: u32, array_id: u32, new_slot: u32) -> Result<u64> {
api_3arg_call(parent_slot, array_id, new_slot, c::slot_subarray)
}
#[inline(always)]
pub fn slot_subfield(parent_slot: u32, field_id: FieldId, new_slot: u32) -> Result<u64> {
api_3arg_call(parent_slot, field_id as _, new_slot, c::slot_subfield)
}
#[inline(always)]
pub fn slot_type(slot_no: u32, flags: SlotTypeFlags) -> Result<FieldOrXrpAmount> {
match flags {
SlotTypeFlags::Field => {
let res = unsafe { c::slot_type(slot_no, 0) };
match res {
res if res >= 0 => Ok(FieldOrXrpAmount::Field(unsafe {
core::mem::transmute::<u32, api::FieldId>(res as u32)
})),
_ => Err(Error::from_code(res as _)),
}
}
SlotTypeFlags::XrpAmount => {
let res = unsafe { c::slot_type(slot_no, 1) };
match res {
1 => Ok(FieldOrXrpAmount::XrpAmount),
res if res >= 0 => Ok(FieldOrXrpAmount::NonXrpAmount),
_ => Err(Error::from_code(res as _)),
}
}
}
}
#[inline(always)]
pub fn slot_float(slot_no: u32) -> Result<XFL> {
XFL::from_verified_i64(unsafe { c::slot_float(slot_no) })
}