use crate::util::go_type::FFIError;
use crate::util::go_type::NosqldbTableRequestPtr;
use crate::util::util::ref_free_drop;
use self::ffi::nosqldb_table_request_new;
use self::ffi::nosqldb_table_request_set;
use self::ffi::nosqldb_table_request_set_table_limits;
use super::nosqldb_table_limits::NosqldbTableLimits;
pub(crate) mod ffi {
use std::{ffi::c_uint, mem};
use crate::{util::{go_type::{NosqldbTableLimitsPtr, NosqldbTableRequestPtr, FFIError, GoString, GoErrorPtr}, util::c_char_to_str}, str_to_gostr, nosqldb::nosqldb_table_limits::NosqldbTableLimits};
use super::{NosqldbTableRequest, NosqldbTableRequestChild};
extern "C" {
fn ffi_nosqldb_table_request_new() -> NosqldbTableRequestPtr;
}
pub fn nosqldb_table_request_new(
) -> Result<NosqldbTableRequest, FFIError> {
let nosqldb_table_request_ptr: NosqldbTableRequestPtr = unsafe { ffi_nosqldb_table_request_new() };
Ok(NosqldbTableRequest{ nosqldb_table_request_ptr })
}
extern "C" {
fn ffi_nosqldb_table_request_set(treq: NosqldbTableRequestPtr, key: c_uint, value: GoString) -> GoErrorPtr;
fn ffi_nosqldb_table_request_set_table_limits(treq: NosqldbTableRequestPtr, tlmts: NosqldbTableLimitsPtr) -> GoErrorPtr;
}
pub fn nosqldb_table_request_set(
treq: &mut NosqldbTableRequest,
key: NosqldbTableRequestChild,
value: &str,
) -> Result<(), FFIError> {
str_to_gostr!(value);
let err = unsafe { ffi_nosqldb_table_request_set(treq.nosqldb_table_request_ptr, key as c_uint, value) };
if err.is_null() {
Ok(())
} else {
Err(FFIError::GoError(c_char_to_str(err)?))
}
}
pub fn nosqldb_table_request_set_table_limits (
treq: &mut NosqldbTableRequest,
tlmts: NosqldbTableLimits,
) -> Result<(), FFIError> {
let err = unsafe { ffi_nosqldb_table_request_set_table_limits(treq.nosqldb_table_request_ptr, tlmts.nosqldb_table_limits_ptr) };
mem::forget(tlmts);
if err.is_null() {
Ok(())
} else {
Err(FFIError::GoError(c_char_to_str(err)?))
}
}
}
#[derive(Debug)]
pub struct NosqldbTableRequest {
pub(crate) nosqldb_table_request_ptr: NosqldbTableRequestPtr,
}
impl NosqldbTableRequest {
pub fn new () -> Result<Self, FFIError> {
nosqldb_table_request_new()
}
pub fn set (&mut self, key: NosqldbTableRequestChild, value: &str) -> Result<(), FFIError> {
nosqldb_table_request_set(self, key, value)
}
pub fn set_tlmts (&mut self, tlmts: NosqldbTableLimits) -> Result<(), FFIError> {
nosqldb_table_request_set_table_limits(self, tlmts)
}
}
impl Drop for NosqldbTableRequest {
fn drop(&mut self) {
ref_free_drop(self.nosqldb_table_request_ptr);
}
}
pub enum NosqldbTableRequestChild {
Statement,
TableName
}