#![doc = include_str!("../README.md")]
use foundationdb_sys::if_cfg_api_versions;
#[macro_use]
extern crate static_assertions;
pub mod api;
if_cfg_api_versions! {min = 510, max = 600 =>
pub mod cluster;
}
mod database;
pub mod directory;
mod error;
if_cfg_api_versions! {min = 700 =>
#[deny(missing_docs)]
pub mod fdb_keys;
}
pub mod future;
mod keyselector;
if_cfg_api_versions! {min = 710 =>
#[deny(missing_docs)]
pub mod mapped_key_values;
}
pub mod metrics;
#[allow(clippy::all)]
pub mod options;
if_cfg_api_versions! {min = 710 =>
#[cfg(feature = "tenant-experimental")]
pub mod tenant;
}
pub use crate::metrics::TransactionMetrics;
pub mod timekeeper;
mod transaction;
mod tuple_ext;
pub mod tuple {
pub use crate::tuple_ext::*;
pub use foundationdb_tuple::*;
}
if_cfg_api_versions! {min = 510, max = 600 =>
pub use crate::cluster::Cluster;
}
pub use crate::database::*;
pub use crate::error::FdbBindingError;
pub use crate::error::{FdbError, FdbResult};
pub use crate::keyselector::*;
pub use crate::transaction::*;
pub unsafe fn boot() -> api::NetworkAutoStop {
let network_builder = api::FdbApiBuilder::default()
.build()
.expect("foundationdb API to be initialized");
network_builder.boot().expect("fdb network running")
}
#[cfg(target_os = "linux")]
pub fn default_config_path() -> &'static str {
"/etc/foundationdb/fdb.cluster"
}
#[cfg(target_os = "macos")]
pub fn default_config_path() -> &'static str {
"/usr/local/etc/foundationdb/fdb.cluster"
}
#[cfg(target_os = "windows")]
pub fn default_config_path() -> &'static str {
"C:/ProgramData/foundationdb/fdb.cluster"
}
fn from_raw_fdb_slice<T, U: Into<usize>>(ptr: *const T, len: U) -> &'static [T] {
if ptr.is_null() {
return &[];
}
unsafe { std::slice::from_raw_parts(ptr, len.into()) }
}