1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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);
    }
}