Skip to content

Commit

Permalink
Merge pull request #1 from michaelgrigoryan25/dev
Browse files Browse the repository at this point in the history
  • Loading branch information
chungquantin authored Jan 27, 2023
2 parents 64e318b + b7499f0 commit de1ba92
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 1,256 deletions.
3 changes: 1 addition & 2 deletions rust/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@ publish = true
edition = "2021"
readme = "CARGO.md"
homepage = "https://github.com/unum-cloud/ukv"
documentation = "https://unum.cloud/ukv/rust/index.html"
repository = "https://github.com/unum-cloud/ukv"
build = "build.rs"
documentation = "https://unum.cloud/ukv/rust/index.html"

[build-dependencies]
bindgen = "0.63.0"
Expand Down
19 changes: 8 additions & 11 deletions rust/build.rs
Original file line number Diff line number Diff line change
@@ -1,23 +1,20 @@
extern crate bindgen;

use std::env::var;
use std::path::PathBuf;

fn main() {
// Tell cargo to invalidate the built crate whenever the wrapper changes
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("cargo:rerun-if-changed=wrapper.h");
// Tell cargo to look for shared libraries in the specified directory
println!("cargo:rustc-link-search=../include/ukv");
// println!("cargo:rustc-link-search=../include");

let bindings = bindgen::Builder::default()
// .header("../include/ukv/db.h")
// .header("../include/ukv/blobs.h")
.header("./wrapper.h")
.clang_args(&["-I../include", "-I../include/ukv"])
.detect_include_paths(true)
.parse_callbacks(Box::new(bindgen::CargoCallbacks))
.generate()
.expect("Unable to generate bindings");
.generate()?;

// Write the bindings to the $OUT_DIR/bindings.rs file.
let out_path = PathBuf::from("./src/ukv");
bindings.write_to_file(out_path.join("bindings.rs")).expect("Couldn't write bindings!");
let out_path = PathBuf::from(var("OUT_DIR")?);
bindings.write_to_file(out_path.join("bindings.rs"))?;
Ok(())
}
65 changes: 40 additions & 25 deletions rust/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,47 +1,62 @@
mod error;
mod ukv;
#![allow(non_upper_case_globals)]
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]

use std::ffi::CString;
mod error;

include!("../src/ukv/bindings.rs");
pub mod bindings {
include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
}

type UkvDatabaseInitType = ukv_database_init_t;
type UkvDatabaseInitType = bindings::ukv_database_init_t;

pub struct Database {
db: UkvDatabaseInitType,
pub db: UkvDatabaseInitType,
}

impl Default for Database {
fn default() -> Self {
let config: *const _ = std::ffi::CString::default().as_ptr();
let error: *mut _ = &mut std::ffi::CString::default().as_ptr();
let void_fn = &mut () as *mut _ as *mut std::ffi::c_void;
let mut db = UkvDatabaseInitType {
error,
config,
db: void_fn as _,
};

unsafe { bindings::ukv_database_init(&mut db) };
Self {
db,
}
}
}

impl Database {
/// Open a new database using ukv_database_init()
pub fn new() -> Result<Self, error::DataStoreError> {
let c_str = CString::default();
let config: *const std::ffi::c_char = c_str.as_ptr();
let error: *mut *const std::ffi::c_char = &mut c_str.as_ptr();
let mut void_fn = &mut () as *mut _ as *mut std::ffi::c_void;
let db_ptr = &mut void_fn;
let mut database = UkvDatabaseInitType {
config,
db: db_ptr,
pub fn new() -> Self {
let config: *const _ = std::ffi::CString::default().as_ptr();
let error: *mut _ = &mut std::ffi::CString::default().as_ptr();
let void_fn = &mut () as *mut _ as *mut std::ffi::c_void;
let mut db = UkvDatabaseInitType {
error,
};
// Calling C++ function generated from bindgen
unsafe {
ukv_database_init(&mut database);
config,
db: void_fn as _,
};

Ok(Self {
db: database,
})
unsafe { bindings::ukv_database_init(&mut db) };
Self {
db,
}
}

pub fn contains_key() {}

// Close a database using ukv_database_free()
pub fn close() -> Result<(), error::DataStoreError> {
let void_fn = &mut () as *mut _ as *mut std::ffi::c_void;
unsafe {
ukv_database_free(void_fn);
};
unsafe { bindings::ukv_database_free(void_fn) };

Ok(())
}
}
Loading

0 comments on commit de1ba92

Please sign in to comment.