use libc::c_void;
use crate::util::{util::ref_free_drop, go_type::FFIError};
use super::nosqldb_client::NosqldbClient;
pub(crate) mod ffi {
use std::ffi::c_uint;
use crate::{util::{go_type::{FFIError, NosqldbClientPtr, NosqldbTableResultPtr}, util::{c_char_to_str, ffi::FfiNosqldbPtrAndErrorNewReturn}}, nosqldb::nosqldb_client::NosqldbClient};
use super::NosqldbTableResult;
extern "C" {
fn ffi_nosqldb_table_result_wait_for_completion(tres: NosqldbTableResultPtr, client: NosqldbClientPtr, timeout: c_uint, poll_interval: c_uint) -> FfiNosqldbPtrAndErrorNewReturn;
}
pub(crate) fn nosqldb_table_result_wait_for_completion(
tres: &mut NosqldbTableResult,
client: NosqldbClient,
timeout: u32,
poll_interval: u32
) -> Result<NosqldbTableResult, FFIError> {
let FfiNosqldbPtrAndErrorNewReturn {ptr: nosqldb_table_result_ptr, go_error_ptr} = unsafe { ffi_nosqldb_table_result_wait_for_completion(tres.nosqldb_table_result_ptr, client.nosqldb_client_ptr, timeout, poll_interval) };
if go_error_ptr.is_null() {
Ok(NosqldbTableResult {nosqldb_table_result_ptr})
} else {
Err(FFIError::GoError(c_char_to_str(go_error_ptr)?))
}
}
}
#[derive(Debug)]
pub struct NosqldbTableResult {
pub(crate) nosqldb_table_result_ptr: *const c_void,
}
impl NosqldbTableResult {
pub fn wait_for_completion(&mut self, client: NosqldbClient, timeout: u32, poll_interval: u32) -> Result<Self, FFIError> {
ffi::nosqldb_table_result_wait_for_completion(self, client, timeout, poll_interval)
}
}
impl Drop for NosqldbTableResult {
fn drop(&mut self) {
ref_free_drop(self.nosqldb_table_result_ptr);
}
}