use crate::check;
use crate::duckly::{duckdb_connect, duckdb_connection, duckdb_database};
use crate::Connection;
use std::ffi::c_void;
use std::ptr::{addr_of, null_mut};
#[repr(C)]
#[derive(Debug)]
struct Wrapper {
instance: *const c_void,
}
#[derive(Debug)]
pub struct Database(Wrapper);
impl Database {
pub fn from_cpp_duckdb(ptr: *mut c_void) -> Self {
Self(Wrapper { instance: ptr })
}
fn ptr(&self) -> duckdb_database {
addr_of!(self.0) as duckdb_database
}
pub unsafe fn connect(&self) -> Result<Connection, Box<dyn std::error::Error>> {
let mut connection: duckdb_connection = null_mut();
check!(duckdb_connect(self.ptr(), &mut connection));
Ok(Connection::from(connection))
}
}