use crate::util::go_type::FFIError;
use crate::util::go_type::NosqldbConfigPtr;
use crate::util::util::ref_free_drop;
use self::ffi::nosqldb_config_new;
use self::ffi::nosqldb_config_set;
use self::ffi::nosqldb_config_set_logging_config;
use super::log::logging_config::NosqldbLoggingConfig;
pub(crate) mod ffi {
use std::{ffi::c_uint, mem};
use crate::{util::{go_type::{NosqldbConfigPtr, FFIError, GoString, GoErrorPtr}, util::c_char_to_str}, str_to_gostr, nosqldb::log::logging_config::{NosqldbLoggingConfigPtr, NosqldbLoggingConfig}};
use super::{NosqldbConfig, NosqldbConfigChild};
extern "C" {
fn ffi_nosqldb_config_new() -> NosqldbConfigPtr;
}
pub fn nosqldb_config_new(
) -> Result<NosqldbConfig, FFIError> {
let nosqldb_config_ptr: NosqldbConfigPtr = unsafe { ffi_nosqldb_config_new() };
Ok(NosqldbConfig{ nosqldb_config_ptr })
}
extern "C" {
fn ffi_nosqldb_config_set(cfg: NosqldbConfigPtr, key: c_uint, value: GoString) -> GoErrorPtr;
fn ffi_nosqldb_config_set_logging_config(cfg: NosqldbConfigPtr, lcfg: NosqldbLoggingConfigPtr) -> GoErrorPtr;
}
pub fn nosqldb_config_set(
cfg: &mut NosqldbConfig,
key: NosqldbConfigChild,
value: &str,
) -> Result<(), FFIError> {
str_to_gostr!(value);
let err = unsafe { ffi_nosqldb_config_set(cfg.nosqldb_config_ptr, key as c_uint, value) };
if err.is_null() {
Ok(())
} else {
Err(FFIError::GoError(c_char_to_str(err)?))
}
}
pub fn nosqldb_config_set_logging_config (
cfg: &mut NosqldbConfig,
lcfg: NosqldbLoggingConfig,
) -> Result<(), FFIError> {
let err = unsafe { ffi_nosqldb_config_set_logging_config(cfg.nosqldb_config_ptr, lcfg.nosqldb_logging_config) };
mem::forget(lcfg);
if err.is_null() {
Ok(())
} else {
Err(FFIError::GoError(c_char_to_str(err)?))
}
}
}
#[derive(Debug)]
pub struct NosqldbConfig {
pub(crate) nosqldb_config_ptr: NosqldbConfigPtr,
}
impl NosqldbConfig {
pub fn new () -> Result<Self, FFIError> {
nosqldb_config_new()
}
pub fn set (&mut self, key: NosqldbConfigChild, value: &str) -> Result<(), FFIError> {
nosqldb_config_set(self, key, value)
}
pub fn set_lcfg (&mut self, lcfg: NosqldbLoggingConfig) -> Result<(), FFIError> {
nosqldb_config_set_logging_config(self, lcfg)
}
}
impl Drop for NosqldbConfig {
fn drop(&mut self) {
ref_free_drop(self.nosqldb_config_ptr);
}
}
pub enum NosqldbConfigChild {
Endpoint,
Mode,
Region,
}