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
50
use libc::c_void;

use crate::util::{util::ref_free_drop, go_type::FFIError};

use self::ffi::nosqldb_logging_config_new;

use super::logger::NosqldbLogger;


pub(crate) mod ffi {
    use std::mem;

    use crate::{nosqldb::log::logger::{NosqldbLogger, NosqldbLoggerPtr}, util::{util::{ffi::FfiNosqldbPtrAndErrorNewReturn, c_char_to_str}, go_type::FFIError}};

    use super::NosqldbLoggingConfig;

    extern "C" {
        pub fn ffi_nosqldb_logging_config_new(ioWritter_ptr: NosqldbLoggerPtr) -> FfiNosqldbPtrAndErrorNewReturn;
    }

    pub fn nosqldb_logging_config_new (
        logger: NosqldbLogger,
    ) -> Result<NosqldbLoggingConfig, FFIError> {
        let FfiNosqldbPtrAndErrorNewReturn{ ptr: logging_config_ptr, go_error_ptr } = unsafe { ffi_nosqldb_logging_config_new(logger.nosqldb_logger) };
        mem::forget(logger);
        if go_error_ptr.is_null() {
            Ok(NosqldbLoggingConfig { nosqldb_logging_config: logging_config_ptr })
        } else {
            Err(FFIError::GoError(c_char_to_str(go_error_ptr)?))
        }
    }
}

pub(crate) type NosqldbLoggingConfigPtr = *const c_void;

pub struct NosqldbLoggingConfig {
    pub(crate) nosqldb_logging_config: NosqldbLoggingConfigPtr,
}

impl NosqldbLoggingConfig {
    pub fn new (logger: NosqldbLogger) -> Result<Self, FFIError> { 
      nosqldb_logging_config_new(logger)
    }
}

impl Drop for NosqldbLoggingConfig {
    fn drop(&mut self) {
        ref_free_drop(self.nosqldb_logging_config);
    }
}