use std::collections::HashMap;
use serde::Serialize;
use crate::util::go_map::GoMap;
use crate::util::go_type::FFIError;
use crate::util::go_type::NosqldbDeleteRequestPtr;
use crate::util::util::ref_free_drop;
use self::ffi::nosqldb_delete_request_new;
use self::ffi::nosqldb_delete_request_table_name_set;
use self::ffi::nosqldb_delete_request_key_set;
pub(crate) mod ffi{
use super::NosqldbDeleteRequest;
use std::mem;
use crate::{util::{go_type::{NosqldbDeleteRequestPtr, FFIError, GoErrorPtr, GoString, NosqldbDeleteRequestKeyPtr}, util::c_char_to_str, go_map::GoMap}, str_to_gostr};
extern "C" {
fn ffi_nosqldb_delete_request_new() -> NosqldbDeleteRequestPtr;
}
pub fn nosqldb_delete_request_new(
) -> Result<NosqldbDeleteRequest, FFIError> {
let nosqldb_delete_request_ptr: NosqldbDeleteRequestPtr = unsafe { ffi_nosqldb_delete_request_new() };
Ok(NosqldbDeleteRequest{ nosqldb_delete_request_ptr })
}
extern "C"{
fn ffi_nosqldb_delete_request_table_name_set(dltrq: NosqldbDeleteRequestPtr, tbnm:GoString) -> GoErrorPtr;
}
pub fn nosqldb_delete_request_table_name_set(
dltrq: &mut NosqldbDeleteRequest,
tbnm: &str
)-> Result<(), FFIError> {
str_to_gostr!(tbnm);
let err = unsafe { ffi_nosqldb_delete_request_table_name_set(dltrq.nosqldb_delete_request_ptr, tbnm) };
if err.is_null() {
Ok(())
} else {
Err(FFIError::GoError(c_char_to_str(err)?))
}
}
extern "C"{
fn ffi_nosqldb_delete_request_key_set(dltrq: NosqldbDeleteRequestPtr, key: NosqldbDeleteRequestKeyPtr) -> GoErrorPtr;
}
pub fn nosqldb_delete_request_key_set(
dltrq: &mut NosqldbDeleteRequest,
key: GoMap
)-> Result<(), FFIError> {
let err = unsafe { ffi_nosqldb_delete_request_key_set(dltrq.nosqldb_delete_request_ptr, key.go_map_ptr) };
mem::forget(key);
if err.is_null() {
Ok(())
} else {
Err(FFIError::GoError(c_char_to_str(err)?))
}
}
}
#[derive(Debug)]
pub struct NosqldbDeleteRequest {
pub(crate) nosqldb_delete_request_ptr: NosqldbDeleteRequestPtr,
}
impl NosqldbDeleteRequest {
pub fn new () -> Result<Self, FFIError> {
nosqldb_delete_request_new()
}
pub fn set_table_name (&mut self, tbnm: &str) -> Result<(), FFIError> {
nosqldb_delete_request_table_name_set(self, tbnm)
}
pub fn set_key<T, V> (&mut self, key: HashMap<T, V>) -> Result<(), FFIError>
where
T: AsRef<str> + Serialize,
V: Serialize,
{
nosqldb_delete_request_key_set(self, GoMap::from_hash_map(key)?)
}
}
impl Drop for NosqldbDeleteRequest {
fn drop(&mut self) {
ref_free_drop(self.nosqldb_delete_request_ptr);
}
}