From a425c4b1be6b9333a58493e87b0b094da09e2b8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Uzarski?= Date: Thu, 10 Oct 2024 19:40:12 +0200 Subject: [PATCH 01/15] build: generate bindings for basic types All of the numeric types were for some reason defined by us in `types.rs`. We should let `bindgen` define them. This is what this commit does. Removes basic types definitions from `types.rs` and tells bindgen to generate bindings for these types. Note: size_t type is a bit special, and will be addressed in another commit. --- scylla-rust-wrapper/build.rs | 17 +++++++++++++++++ scylla-rust-wrapper/src/types.rs | 20 ++------------------ 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/scylla-rust-wrapper/build.rs b/scylla-rust-wrapper/build.rs index 643aad69..9ac3121b 100644 --- a/scylla-rust-wrapper/build.rs +++ b/scylla-rust-wrapper/build.rs @@ -27,6 +27,23 @@ fn prepare_basic_types(out_path: &Path) { .parse_callbacks(Box::new(bindgen::CargoCallbacks)) .layout_tests(true) .generate_comments(false) + .allowlist_type("cass_bool_t") + // cass_bool_t enum variants represented as constants. + .constified_enum("cass_bool_t") + // cass_[false/true] instead of cass_bool_t_cass_[*]. + .prepend_enum_name(false) + .allowlist_type("cass_float_t") + .allowlist_type("cass_double_t") + .allowlist_type("cass_int8_t") + .allowlist_type("cass_uint8_t") + .allowlist_type("cass_int16_t") + .allowlist_type("cass_uint16_t") + .allowlist_type("cass_int32_t") + .allowlist_type("cass_uint32_t") + .allowlist_type("cass_int64_t") + .allowlist_type("cass_uint64_t") + .allowlist_type("cass_byte_t") + .allowlist_type("cass_duration_t") .allowlist_type("size_t") .generate() .expect("Unable to generate bindings"); diff --git a/scylla-rust-wrapper/src/types.rs b/scylla-rust-wrapper/src/types.rs index f99ebea6..33cf20d8 100644 --- a/scylla-rust-wrapper/src/types.rs +++ b/scylla-rust-wrapper/src/types.rs @@ -1,21 +1,10 @@ #![allow(non_camel_case_types)] +// for `cass_false` and `cass_true` globals. +#![allow(non_upper_case_globals)] // Definition for size_t (and possibly other types in the future) include!(concat!(env!("OUT_DIR"), "/basic_types.rs")); -pub type cass_bool_t = ::std::os::raw::c_uint; -pub type cass_float_t = f32; -pub type cass_double_t = f64; -pub type cass_int8_t = i8; -pub type cass_uint8_t = u8; -pub type cass_int16_t = i16; -pub type cass_uint16_t = u16; -pub type cass_int32_t = i32; -pub type cass_uint32_t = u32; -pub type cass_int64_t = i64; -pub type cass_uint64_t = u64; -pub type cass_byte_t = cass_uint8_t; -pub type cass_duration_t = cass_uint64_t; pub type size_t = cass_uint64_t; // Implementation directly ported from Cpp Driver implementation: @@ -45,8 +34,3 @@ pub unsafe extern "C" fn cass_date_time_to_epoch( (((date as u64) - CASS_DATE_EPOCH) * (NUM_SECONDS_PER_DAY as u64) + ((time / CASS_TIME_NANOSECONDS_PER_SECOND) as u64)) as i64 } - -#[allow(non_upper_case_globals)] -pub const cass_false: cass_bool_t = 0; -#[allow(non_upper_case_globals)] -pub const cass_true: cass_bool_t = 1; From a26efb76a08a724a597ccd92ee1537722b6704de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Uzarski?= Date: Thu, 10 Oct 2024 20:40:16 +0200 Subject: [PATCH 02/15] build: generate definition for size_t In this commit we tell bindgen to generate a binding for size_t type. Actually, we only tell it not to treat `size_t` as `usize` (which is done by default). Why there were no clashes with `size_t` definition, even though we used `.allowlist("size_t")`? The docstring of `.size_t_is_usize()` states: ``` Set whether size_t should be translated to usize. If size_t is translated to usize, type definitions for size_t will not be emitted. size_t is translated to usize by default. ``` This means that previously (by default), definition for `size_t` was not generated in `basic_types.rs`. What happens now is the definition is generated based on the architecture. In my case it's std::os::raw::c_ulong (equivalent to u64). I'm not really sure whether we should treat `size_t` as `usize` (i.e. create an alias `type size_t = usize`) or not (i.e. `.size_t_is_usize(false)`). This is my question to reviewers :). --- scylla-rust-wrapper/build.rs | 1 + scylla-rust-wrapper/src/types.rs | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/scylla-rust-wrapper/build.rs b/scylla-rust-wrapper/build.rs index 9ac3121b..ab4f0836 100644 --- a/scylla-rust-wrapper/build.rs +++ b/scylla-rust-wrapper/build.rs @@ -45,6 +45,7 @@ fn prepare_basic_types(out_path: &Path) { .allowlist_type("cass_byte_t") .allowlist_type("cass_duration_t") .allowlist_type("size_t") + .size_t_is_usize(false) .generate() .expect("Unable to generate bindings"); diff --git a/scylla-rust-wrapper/src/types.rs b/scylla-rust-wrapper/src/types.rs index 33cf20d8..bf81529b 100644 --- a/scylla-rust-wrapper/src/types.rs +++ b/scylla-rust-wrapper/src/types.rs @@ -5,8 +5,6 @@ // Definition for size_t (and possibly other types in the future) include!(concat!(env!("OUT_DIR"), "/basic_types.rs")); -pub type size_t = cass_uint64_t; - // Implementation directly ported from Cpp Driver implementation: const NUM_SECONDS_PER_DAY: i64 = 24 * 60 * 60; From 3e317588ca6244de7c1681129407ec1821298759 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Uzarski?= Date: Fri, 11 Oct 2024 13:34:17 +0200 Subject: [PATCH 03/15] mod: create date_time module Moved all of the conversions related to date and time to a separate module - date_time.rs --- scylla-rust-wrapper/src/date_time.rs | 29 ++++++++++++++++++++++++++++ scylla-rust-wrapper/src/lib.rs | 1 + scylla-rust-wrapper/src/types.rs | 28 --------------------------- 3 files changed, 30 insertions(+), 28 deletions(-) create mode 100644 scylla-rust-wrapper/src/date_time.rs diff --git a/scylla-rust-wrapper/src/date_time.rs b/scylla-rust-wrapper/src/date_time.rs new file mode 100644 index 00000000..f2b695e2 --- /dev/null +++ b/scylla-rust-wrapper/src/date_time.rs @@ -0,0 +1,29 @@ +use crate::types::{cass_int64_t, cass_uint32_t}; + +// Implementation directly ported from Cpp Driver implementation: + +const NUM_SECONDS_PER_DAY: i64 = 24 * 60 * 60; +const CASS_DATE_EPOCH: u64 = 2147483648; // 2^31 +const CASS_TIME_NANOSECONDS_PER_SECOND: i64 = 1_000_000_000; + +// All type conversions (between i32, u64, i64) based on original Cpp Driver implementation +// and C++ implicit type promotion rules. + +#[no_mangle] +pub unsafe extern "C" fn cass_date_from_epoch(epoch_secs: cass_int64_t) -> cass_uint32_t { + ((epoch_secs / NUM_SECONDS_PER_DAY) + (CASS_DATE_EPOCH as i64)) as u32 +} + +#[no_mangle] +pub unsafe extern "C" fn cass_time_from_epoch(epoch_secs: cass_int64_t) -> cass_int64_t { + CASS_TIME_NANOSECONDS_PER_SECOND * (epoch_secs % NUM_SECONDS_PER_DAY) +} + +#[no_mangle] +pub unsafe extern "C" fn cass_date_time_to_epoch( + date: cass_uint32_t, + time: cass_int64_t, +) -> cass_int64_t { + (((date as u64) - CASS_DATE_EPOCH) * (NUM_SECONDS_PER_DAY as u64) + + ((time / CASS_TIME_NANOSECONDS_PER_SECOND) as u64)) as i64 +} diff --git a/scylla-rust-wrapper/src/lib.rs b/scylla-rust-wrapper/src/lib.rs index 2833437d..2c21b269 100644 --- a/scylla-rust-wrapper/src/lib.rs +++ b/scylla-rust-wrapper/src/lib.rs @@ -14,6 +14,7 @@ pub mod cass_error; pub mod cass_types; pub mod cluster; pub mod collection; +pub mod date_time; pub mod exec_profile; mod external; pub mod future; diff --git a/scylla-rust-wrapper/src/types.rs b/scylla-rust-wrapper/src/types.rs index bf81529b..491e2fe4 100644 --- a/scylla-rust-wrapper/src/types.rs +++ b/scylla-rust-wrapper/src/types.rs @@ -4,31 +4,3 @@ // Definition for size_t (and possibly other types in the future) include!(concat!(env!("OUT_DIR"), "/basic_types.rs")); - -// Implementation directly ported from Cpp Driver implementation: - -const NUM_SECONDS_PER_DAY: i64 = 24 * 60 * 60; -const CASS_DATE_EPOCH: u64 = 2147483648; // 2^31 -const CASS_TIME_NANOSECONDS_PER_SECOND: i64 = 1_000_000_000; - -// All type conversions (between i32, u64, i64) based on original Cpp Driver implementation -// and C++ implicit type promotion rules. - -#[no_mangle] -pub unsafe extern "C" fn cass_date_from_epoch(epoch_secs: cass_int64_t) -> cass_uint32_t { - ((epoch_secs / NUM_SECONDS_PER_DAY) + (CASS_DATE_EPOCH as i64)) as u32 -} - -#[no_mangle] -pub unsafe extern "C" fn cass_time_from_epoch(epoch_secs: cass_int64_t) -> cass_int64_t { - CASS_TIME_NANOSECONDS_PER_SECOND * (epoch_secs % NUM_SECONDS_PER_DAY) -} - -#[no_mangle] -pub unsafe extern "C" fn cass_date_time_to_epoch( - date: cass_uint32_t, - time: cass_int64_t, -) -> cass_int64_t { - (((date as u64) - CASS_DATE_EPOCH) * (NUM_SECONDS_PER_DAY as u64) - + ((time / CASS_TIME_NANOSECONDS_PER_SECOND) as u64)) as i64 -} From 6fc4b36247d59b1d39a1c678672cd0fc27a2e2d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Uzarski?= Date: Tue, 15 Oct 2024 17:41:15 +0200 Subject: [PATCH 04/15] mod: introduce a handful macro for including generated files This is going to be used in following commits - we are planning to create a separate module per generated file. No need to repeat the concatenation logic each time. --- scylla-rust-wrapper/src/lib.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/scylla-rust-wrapper/src/lib.rs b/scylla-rust-wrapper/src/lib.rs index 2c21b269..435d4335 100644 --- a/scylla-rust-wrapper/src/lib.rs +++ b/scylla-rust-wrapper/src/lib.rs @@ -38,6 +38,13 @@ pub mod user_type; pub mod uuid; pub mod value; +/// Includes a file generated by bindgen called `filename`. +macro_rules! _include_bindgen_generated { + ($filename:expr) => { + include!(concat!(env!("OUT_DIR"), '/', $filename)); + }; +} + lazy_static! { pub static ref RUNTIME: Runtime = Runtime::new().unwrap(); pub static ref LOGGER: RwLock = RwLock::new(Logger { From 7ef3c3e9c013a814a577147dd17070ac28ab51a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Uzarski?= Date: Fri, 11 Oct 2024 13:45:28 +0200 Subject: [PATCH 05/15] mod: move types module to lib.rs --- scylla-rust-wrapper/src/lib.rs | 13 +++++++++++-- scylla-rust-wrapper/src/types.rs | 6 ------ 2 files changed, 11 insertions(+), 8 deletions(-) delete mode 100644 scylla-rust-wrapper/src/types.rs diff --git a/scylla-rust-wrapper/src/lib.rs b/scylla-rust-wrapper/src/lib.rs index 435d4335..c8233822 100644 --- a/scylla-rust-wrapper/src/lib.rs +++ b/scylla-rust-wrapper/src/lib.rs @@ -33,18 +33,27 @@ pub mod statement; #[cfg(test)] pub mod testing; pub mod tuple; -pub mod types; pub mod user_type; pub mod uuid; pub mod value; /// Includes a file generated by bindgen called `filename`. -macro_rules! _include_bindgen_generated { +macro_rules! include_bindgen_generated { ($filename:expr) => { include!(concat!(env!("OUT_DIR"), '/', $filename)); }; } +/// All numeric types are defined here. +pub mod types { + #![allow(non_camel_case_types)] + // for `cass_false` and `cass_true` globals. + #![allow(non_upper_case_globals)] + + // Definition for size_t (and possibly other types in the future) + include_bindgen_generated!("basic_types.rs"); +} + lazy_static! { pub static ref RUNTIME: Runtime = Runtime::new().unwrap(); pub static ref LOGGER: RwLock = RwLock::new(Logger { diff --git a/scylla-rust-wrapper/src/types.rs b/scylla-rust-wrapper/src/types.rs deleted file mode 100644 index 491e2fe4..00000000 --- a/scylla-rust-wrapper/src/types.rs +++ /dev/null @@ -1,6 +0,0 @@ -#![allow(non_camel_case_types)] -// for `cass_false` and `cass_true` globals. -#![allow(non_upper_case_globals)] - -// Definition for size_t (and possibly other types in the future) -include!(concat!(env!("OUT_DIR"), "/basic_types.rs")); From b1b490baf28166b2c1a3d9a1db6888d3dd0313b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Uzarski?= Date: Fri, 11 Oct 2024 13:48:48 +0200 Subject: [PATCH 06/15] mod: introduce cass_error_types module Moved the include!(...) that defines `CassError` and `CassErrorSource` to separate module in lib.rs. Types definition are re-exported in `cass_error.rs` as well. --- scylla-rust-wrapper/build.rs | 2 +- scylla-rust-wrapper/src/cass_error.rs | 3 ++- scylla-rust-wrapper/src/lib.rs | 5 +++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/scylla-rust-wrapper/build.rs b/scylla-rust-wrapper/build.rs index ab4f0836..9ee7306d 100644 --- a/scylla-rust-wrapper/build.rs +++ b/scylla-rust-wrapper/build.rs @@ -85,7 +85,7 @@ fn main() { prepare_basic_types(&out_path); prepare_cppdriver_data( - "cppdriver_data_errors.rs", + "cppdriver_error_types.rs", &[ "CassErrorSource_", "CassErrorSource", diff --git a/scylla-rust-wrapper/src/cass_error.rs b/scylla-rust-wrapper/src/cass_error.rs index 3576e7d4..f4e958be 100644 --- a/scylla-rust-wrapper/src/cass_error.rs +++ b/scylla-rust-wrapper/src/cass_error.rs @@ -1,6 +1,7 @@ use scylla::transport::errors::*; -include!(concat!(env!("OUT_DIR"), "/cppdriver_data_errors.rs")); +// Re-export error types. +pub(crate) use crate::cass_error_types::{CassError, CassErrorSource}; impl From<&QueryError> for CassError { fn from(error: &QueryError) -> Self { diff --git a/scylla-rust-wrapper/src/lib.rs b/scylla-rust-wrapper/src/lib.rs index c8233822..4dbd42c8 100644 --- a/scylla-rust-wrapper/src/lib.rs +++ b/scylla-rust-wrapper/src/lib.rs @@ -54,6 +54,11 @@ pub mod types { include_bindgen_generated!("basic_types.rs"); } +/// CassError, CassErrorSource +pub mod cass_error_types { + include_bindgen_generated!("cppdriver_error_types.rs"); +} + lazy_static! { pub static ref RUNTIME: Runtime = Runtime::new().unwrap(); pub static ref LOGGER: RwLock = RwLock::new(Logger { From fb2093aac9ff207c5f569e399414fed108b2a107 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Uzarski?= Date: Fri, 11 Oct 2024 13:52:47 +0200 Subject: [PATCH 07/15] mod: introduced cass_value_type module --- scylla-rust-wrapper/src/cass_types.rs | 3 ++- scylla-rust-wrapper/src/lib.rs | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/scylla-rust-wrapper/src/cass_types.rs b/scylla-rust-wrapper/src/cass_types.rs index 66294e74..6a9b5e53 100644 --- a/scylla-rust-wrapper/src/cass_types.rs +++ b/scylla-rust-wrapper/src/cass_types.rs @@ -11,7 +11,8 @@ use std::os::raw::c_char; use std::ptr; use std::sync::Arc; -include!(concat!(env!("OUT_DIR"), "/cppdriver_data_types.rs")); +pub(crate) use crate::cass_data_types::CassValueType; + include!(concat!(env!("OUT_DIR"), "/cppdriver_data_query_error.rs")); include!(concat!(env!("OUT_DIR"), "/cppdriver_batch_types.rs")); diff --git a/scylla-rust-wrapper/src/lib.rs b/scylla-rust-wrapper/src/lib.rs index 4dbd42c8..1841454c 100644 --- a/scylla-rust-wrapper/src/lib.rs +++ b/scylla-rust-wrapper/src/lib.rs @@ -59,6 +59,11 @@ pub mod cass_error_types { include_bindgen_generated!("cppdriver_error_types.rs"); } +/// CassValueType +pub mod cass_data_types { + include_bindgen_generated!("cppdriver_data_types.rs"); +} + lazy_static! { pub static ref RUNTIME: Runtime = Runtime::new().unwrap(); pub static ref LOGGER: RwLock = RwLock::new(Logger { From c54d09a1813d748dfced56c2d338d7aa9a5f17aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Uzarski?= Date: Mon, 14 Oct 2024 13:29:31 +0200 Subject: [PATCH 08/15] mod: introduce cass_consistency_types module --- scylla-rust-wrapper/build.rs | 12 ++++++------ scylla-rust-wrapper/src/cass_types.rs | 1 + scylla-rust-wrapper/src/lib.rs | 5 +++++ scylla-rust-wrapper/src/misc.rs | 4 +++- scylla-rust-wrapper/src/query_error.rs | 1 + scylla-rust-wrapper/src/statement.rs | 1 + 6 files changed, 17 insertions(+), 7 deletions(-) diff --git a/scylla-rust-wrapper/build.rs b/scylla-rust-wrapper/build.rs index 9ee7306d..4c58e36a 100644 --- a/scylla-rust-wrapper/build.rs +++ b/scylla-rust-wrapper/build.rs @@ -94,6 +94,11 @@ fn main() { ], &out_path, ); + prepare_cppdriver_data( + "cppdriver_consistency_types.rs", + &["CassConsistency_", "CassConsistency"], + &out_path, + ); prepare_cppdriver_data( "cppdriver_batch_types.rs", &["CassBatchType_", "CassBatchType"], @@ -126,12 +131,7 @@ fn main() { ); prepare_cppdriver_data( "cppdriver_data_query_error.rs", - &[ - "CassConsistency_", - "CassConsistency", - "CassWriteType", - "CassWriteType_", - ], + &["CassWriteType", "CassWriteType_"], &out_path, ); prepare_cppdriver_data( diff --git a/scylla-rust-wrapper/src/cass_types.rs b/scylla-rust-wrapper/src/cass_types.rs index 6a9b5e53..0ea1b6e2 100644 --- a/scylla-rust-wrapper/src/cass_types.rs +++ b/scylla-rust-wrapper/src/cass_types.rs @@ -11,6 +11,7 @@ use std::os::raw::c_char; use std::ptr; use std::sync::Arc; +pub(crate) use crate::cass_consistency_types::CassConsistency; pub(crate) use crate::cass_data_types::CassValueType; include!(concat!(env!("OUT_DIR"), "/cppdriver_data_query_error.rs")); diff --git a/scylla-rust-wrapper/src/lib.rs b/scylla-rust-wrapper/src/lib.rs index 1841454c..6348fb9a 100644 --- a/scylla-rust-wrapper/src/lib.rs +++ b/scylla-rust-wrapper/src/lib.rs @@ -64,6 +64,11 @@ pub mod cass_data_types { include_bindgen_generated!("cppdriver_data_types.rs"); } +/// CassConsistency +pub mod cass_consistency_types { + include_bindgen_generated!("cppdriver_consistency_types.rs"); +} + lazy_static! { pub static ref RUNTIME: Runtime = Runtime::new().unwrap(); pub static ref LOGGER: RwLock = RwLock::new(Logger { diff --git a/scylla-rust-wrapper/src/misc.rs b/scylla-rust-wrapper/src/misc.rs index 2ad65fa9..94f80395 100644 --- a/scylla-rust-wrapper/src/misc.rs +++ b/scylla-rust-wrapper/src/misc.rs @@ -1,6 +1,8 @@ use std::ffi::{c_char, CStr}; -// CassConsistency definition. +use crate::cass_types::CassConsistency; + +// CassWriteType definition. include!(concat!(env!("OUT_DIR"), "/cppdriver_data_query_error.rs")); impl CassConsistency { diff --git a/scylla-rust-wrapper/src/query_error.rs b/scylla-rust-wrapper/src/query_error.rs index 59a4d7d3..8a31c445 100644 --- a/scylla-rust-wrapper/src/query_error.rs +++ b/scylla-rust-wrapper/src/query_error.rs @@ -1,5 +1,6 @@ use crate::argconv::*; use crate::cass_error::*; +use crate::cass_types::CassConsistency; use crate::types::*; use scylla::statement::Consistency; use scylla::transport::errors::*; diff --git a/scylla-rust-wrapper/src/statement.rs b/scylla-rust-wrapper/src/statement.rs index dc955d79..29f0feea 100644 --- a/scylla-rust-wrapper/src/statement.rs +++ b/scylla-rust-wrapper/src/statement.rs @@ -1,4 +1,5 @@ use crate::cass_error::CassError; +use crate::cass_types::CassConsistency; use crate::exec_profile::PerStatementExecProfile; use crate::prepared::CassPrepared; use crate::query_result::CassResult; From 51fe8de8ddc05d961b62fe916890333739f11942 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Uzarski?= Date: Mon, 14 Oct 2024 13:32:12 +0200 Subject: [PATCH 09/15] mod: move CassWriteType to cass_error_types module CassWriteType appears only in server errors. I think it's reasonable to move it to the module defining error types. We will no longer generate cppdriver_data_query_error.rs file. --- scylla-rust-wrapper/build.rs | 7 ++----- scylla-rust-wrapper/src/cass_types.rs | 1 - scylla-rust-wrapper/src/lib.rs | 2 +- scylla-rust-wrapper/src/misc.rs | 5 +---- scylla-rust-wrapper/src/query_error.rs | 3 +-- scylla-rust-wrapper/src/statement.rs | 2 -- 6 files changed, 5 insertions(+), 15 deletions(-) diff --git a/scylla-rust-wrapper/build.rs b/scylla-rust-wrapper/build.rs index 4c58e36a..4484f16e 100644 --- a/scylla-rust-wrapper/build.rs +++ b/scylla-rust-wrapper/build.rs @@ -91,6 +91,8 @@ fn main() { "CassErrorSource", "CassError_", "CassError", + "CassWriteType", + "CassWriteType_", ], &out_path, ); @@ -129,11 +131,6 @@ fn main() { ], &out_path, ); - prepare_cppdriver_data( - "cppdriver_data_query_error.rs", - &["CassWriteType", "CassWriteType_"], - &out_path, - ); prepare_cppdriver_data( "cppdriver_data_uuid.rs", &["CassUuid_", "CassUuid"], diff --git a/scylla-rust-wrapper/src/cass_types.rs b/scylla-rust-wrapper/src/cass_types.rs index 0ea1b6e2..33b0cb10 100644 --- a/scylla-rust-wrapper/src/cass_types.rs +++ b/scylla-rust-wrapper/src/cass_types.rs @@ -14,7 +14,6 @@ use std::sync::Arc; pub(crate) use crate::cass_consistency_types::CassConsistency; pub(crate) use crate::cass_data_types::CassValueType; -include!(concat!(env!("OUT_DIR"), "/cppdriver_data_query_error.rs")); include!(concat!(env!("OUT_DIR"), "/cppdriver_batch_types.rs")); #[derive(Clone, Debug, PartialEq, Eq)] diff --git a/scylla-rust-wrapper/src/lib.rs b/scylla-rust-wrapper/src/lib.rs index 6348fb9a..0a7a0c7b 100644 --- a/scylla-rust-wrapper/src/lib.rs +++ b/scylla-rust-wrapper/src/lib.rs @@ -54,7 +54,7 @@ pub mod types { include_bindgen_generated!("basic_types.rs"); } -/// CassError, CassErrorSource +/// CassError, CassErrorSource, CassWriteType pub mod cass_error_types { include_bindgen_generated!("cppdriver_error_types.rs"); } diff --git a/scylla-rust-wrapper/src/misc.rs b/scylla-rust-wrapper/src/misc.rs index 94f80395..2ab9ddad 100644 --- a/scylla-rust-wrapper/src/misc.rs +++ b/scylla-rust-wrapper/src/misc.rs @@ -1,9 +1,6 @@ use std::ffi::{c_char, CStr}; -use crate::cass_types::CassConsistency; - -// CassWriteType definition. -include!(concat!(env!("OUT_DIR"), "/cppdriver_data_query_error.rs")); +use crate::{cass_error_types::CassWriteType, cass_types::CassConsistency}; impl CassConsistency { pub(crate) fn as_cstr(&self) -> &'static CStr { diff --git a/scylla-rust-wrapper/src/query_error.rs b/scylla-rust-wrapper/src/query_error.rs index 8a31c445..ef5bfe56 100644 --- a/scylla-rust-wrapper/src/query_error.rs +++ b/scylla-rust-wrapper/src/query_error.rs @@ -1,12 +1,11 @@ use crate::argconv::*; use crate::cass_error::*; +use crate::cass_error_types::CassWriteType; use crate::cass_types::CassConsistency; use crate::types::*; use scylla::statement::Consistency; use scylla::transport::errors::*; -include!(concat!(env!("OUT_DIR"), "/cppdriver_data_query_error.rs")); - pub type CassErrorResult = QueryError; impl From for CassConsistency { diff --git a/scylla-rust-wrapper/src/statement.rs b/scylla-rust-wrapper/src/statement.rs index 29f0feea..28cdaf67 100644 --- a/scylla-rust-wrapper/src/statement.rs +++ b/scylla-rust-wrapper/src/statement.rs @@ -19,8 +19,6 @@ use std::os::raw::{c_char, c_int}; use std::slice; use std::sync::Arc; -include!(concat!(env!("OUT_DIR"), "/cppdriver_data_query_error.rs")); - #[derive(Clone)] pub enum Statement { Simple(SimpleQuery), From 5b6dc64a40afd1803a56617149c85674e767acbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Uzarski?= Date: Fri, 11 Oct 2024 14:08:23 +0200 Subject: [PATCH 10/15] mod: introduce cass_batch_types module --- scylla-rust-wrapper/src/cass_types.rs | 3 +-- scylla-rust-wrapper/src/lib.rs | 5 +++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/scylla-rust-wrapper/src/cass_types.rs b/scylla-rust-wrapper/src/cass_types.rs index 33b0cb10..7c73c604 100644 --- a/scylla-rust-wrapper/src/cass_types.rs +++ b/scylla-rust-wrapper/src/cass_types.rs @@ -11,11 +11,10 @@ use std::os::raw::c_char; use std::ptr; use std::sync::Arc; +pub(crate) use crate::cass_batch_types::CassBatchType; pub(crate) use crate::cass_consistency_types::CassConsistency; pub(crate) use crate::cass_data_types::CassValueType; -include!(concat!(env!("OUT_DIR"), "/cppdriver_batch_types.rs")); - #[derive(Clone, Debug, PartialEq, Eq)] pub struct UDTDataType { // Vec to preserve the order of types diff --git a/scylla-rust-wrapper/src/lib.rs b/scylla-rust-wrapper/src/lib.rs index 0a7a0c7b..88710789 100644 --- a/scylla-rust-wrapper/src/lib.rs +++ b/scylla-rust-wrapper/src/lib.rs @@ -69,6 +69,11 @@ pub mod cass_consistency_types { include_bindgen_generated!("cppdriver_consistency_types.rs"); } +/// CassBatchType +pub mod cass_batch_types { + include_bindgen_generated!("cppdriver_batch_types.rs"); +} + lazy_static! { pub static ref RUNTIME: Runtime = Runtime::new().unwrap(); pub static ref LOGGER: RwLock = RwLock::new(Logger { From 55dee83084449d9451420a521606af8650d3a2ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Uzarski?= Date: Fri, 11 Oct 2024 14:09:58 +0200 Subject: [PATCH 11/15] mod: introduce cass_compression_types module --- scylla-rust-wrapper/src/cluster.rs | 2 +- scylla-rust-wrapper/src/lib.rs | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/scylla-rust-wrapper/src/cluster.rs b/scylla-rust-wrapper/src/cluster.rs index 55af70a3..1daa0a20 100644 --- a/scylla-rust-wrapper/src/cluster.rs +++ b/scylla-rust-wrapper/src/cluster.rs @@ -26,7 +26,7 @@ use std::os::raw::{c_char, c_int, c_uint}; use std::sync::Arc; use std::time::Duration; -include!(concat!(env!("OUT_DIR"), "/cppdriver_compression_types.rs")); +use crate::cass_compression_types::CassCompressionType; // According to `cassandra.h` the default CPP driver's // - consistency for statements is LOCAL_ONE, diff --git a/scylla-rust-wrapper/src/lib.rs b/scylla-rust-wrapper/src/lib.rs index 88710789..0084e22b 100644 --- a/scylla-rust-wrapper/src/lib.rs +++ b/scylla-rust-wrapper/src/lib.rs @@ -74,6 +74,11 @@ pub mod cass_batch_types { include_bindgen_generated!("cppdriver_batch_types.rs"); } +/// CassCompressionType +pub mod cass_compression_types { + include_bindgen_generated!("cppdriver_compression_types.rs"); +} + lazy_static! { pub static ref RUNTIME: Runtime = Runtime::new().unwrap(); pub static ref LOGGER: RwLock = RwLock::new(Logger { From 3e2b010a513abb10e4748a84c33239375f32d828 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Uzarski?= Date: Fri, 11 Oct 2024 14:11:12 +0200 Subject: [PATCH 12/15] mod: introduce cass_collection_types module --- scylla-rust-wrapper/build.rs | 2 +- scylla-rust-wrapper/src/collection.rs | 3 +-- scylla-rust-wrapper/src/lib.rs | 5 +++++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/scylla-rust-wrapper/build.rs b/scylla-rust-wrapper/build.rs index 4484f16e..b410696e 100644 --- a/scylla-rust-wrapper/build.rs +++ b/scylla-rust-wrapper/build.rs @@ -107,7 +107,7 @@ fn main() { &out_path, ); prepare_cppdriver_data( - "cppdriver_data_collection.rs", + "cppdriver_collection_types.rs", &["CassCollectionType_", "CassCollectionType"], &out_path, ); diff --git a/scylla-rust-wrapper/src/collection.rs b/scylla-rust-wrapper/src/collection.rs index ea0c2a79..a396e7ae 100644 --- a/scylla-rust-wrapper/src/collection.rs +++ b/scylla-rust-wrapper/src/collection.rs @@ -1,3 +1,4 @@ +use crate::cass_collection_types::CassCollectionType; use crate::cass_error::CassError; use crate::cass_types::{CassDataType, MapDataType}; use crate::types::*; @@ -6,8 +7,6 @@ use crate::{argconv::*, value}; use std::convert::TryFrom; use std::sync::Arc; -include!(concat!(env!("OUT_DIR"), "/cppdriver_data_collection.rs")); - // These constants help us to save an allocation in case user calls `cass_collection_new` (untyped collection). static UNTYPED_LIST_TYPE: CassDataType = CassDataType::List { typ: None, diff --git a/scylla-rust-wrapper/src/lib.rs b/scylla-rust-wrapper/src/lib.rs index 0084e22b..55c15e5e 100644 --- a/scylla-rust-wrapper/src/lib.rs +++ b/scylla-rust-wrapper/src/lib.rs @@ -79,6 +79,11 @@ pub mod cass_compression_types { include_bindgen_generated!("cppdriver_compression_types.rs"); } +/// CassCollectionType +pub mod cass_collection_types { + include_bindgen_generated!("cppdriver_collection_types.rs"); +} + lazy_static! { pub static ref RUNTIME: Runtime = Runtime::new().unwrap(); pub static ref LOGGER: RwLock = RwLock::new(Logger { From 6e4b1ab729aa18ed448349e79948e5bd20aa8726 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Uzarski?= Date: Fri, 11 Oct 2024 14:15:09 +0200 Subject: [PATCH 13/15] mod: introduce cass_inet_types module --- scylla-rust-wrapper/build.rs | 2 +- scylla-rust-wrapper/src/inet.rs | 3 +-- scylla-rust-wrapper/src/lib.rs | 7 +++++++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/scylla-rust-wrapper/build.rs b/scylla-rust-wrapper/build.rs index b410696e..1dff72f7 100644 --- a/scylla-rust-wrapper/build.rs +++ b/scylla-rust-wrapper/build.rs @@ -117,7 +117,7 @@ fn main() { &out_path, ); prepare_cppdriver_data( - "cppdriver_data_inet.rs", + "cppdriver_inet_types.rs", &["CassInet_", "CassInet"], &out_path, ); diff --git a/scylla-rust-wrapper/src/inet.rs b/scylla-rust-wrapper/src/inet.rs index bd9006bd..4222e9a5 100644 --- a/scylla-rust-wrapper/src/inet.rs +++ b/scylla-rust-wrapper/src/inet.rs @@ -1,4 +1,3 @@ -#![allow(non_camel_case_types, non_snake_case)] use crate::argconv::*; use crate::cass_error::CassError; use crate::types::*; @@ -11,7 +10,7 @@ use std::os::raw::c_char; use std::slice::from_raw_parts; use std::str::FromStr; -include!(concat!(env!("OUT_DIR"), "/cppdriver_data_inet.rs")); +pub(crate) use crate::cass_inet_types::CassInet; #[repr(u8)] // address_length field in CassInet is cass_uint8_t #[allow(non_camel_case_types)] diff --git a/scylla-rust-wrapper/src/lib.rs b/scylla-rust-wrapper/src/lib.rs index 55c15e5e..8f0991ae 100644 --- a/scylla-rust-wrapper/src/lib.rs +++ b/scylla-rust-wrapper/src/lib.rs @@ -84,6 +84,13 @@ pub mod cass_collection_types { include_bindgen_generated!("cppdriver_collection_types.rs"); } +/// CassInet +pub mod cass_inet_types { + #![allow(non_camel_case_types, non_snake_case)] + + include_bindgen_generated!("cppdriver_inet_types.rs"); +} + lazy_static! { pub static ref RUNTIME: Runtime = Runtime::new().unwrap(); pub static ref LOGGER: RwLock = RwLock::new(Logger { From d3828d2bc100a167fcb0f92e559e0bd3d0d36ae2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Uzarski?= Date: Fri, 11 Oct 2024 14:17:08 +0200 Subject: [PATCH 14/15] mod: introduce cass_log_types module --- scylla-rust-wrapper/build.rs | 2 +- scylla-rust-wrapper/src/lib.rs | 7 +++++++ scylla-rust-wrapper/src/logging.rs | 7 +------ 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/scylla-rust-wrapper/build.rs b/scylla-rust-wrapper/build.rs index 1dff72f7..e00943f0 100644 --- a/scylla-rust-wrapper/build.rs +++ b/scylla-rust-wrapper/build.rs @@ -122,7 +122,7 @@ fn main() { &out_path, ); prepare_cppdriver_data( - "cppdriver_log.rs", + "cppdriver_log_types.rs", &[ "CassLogLevel_", "CassLogLevel", diff --git a/scylla-rust-wrapper/src/lib.rs b/scylla-rust-wrapper/src/lib.rs index 8f0991ae..47089690 100644 --- a/scylla-rust-wrapper/src/lib.rs +++ b/scylla-rust-wrapper/src/lib.rs @@ -91,6 +91,13 @@ pub mod cass_inet_types { include_bindgen_generated!("cppdriver_inet_types.rs"); } +/// CassLogLevel, CassLogMessage +pub mod cass_log_types { + #![allow(non_camel_case_types, non_snake_case)] + + include_bindgen_generated!("cppdriver_log_types.rs"); +} + lazy_static! { pub static ref RUNTIME: Runtime = Runtime::new().unwrap(); pub static ref LOGGER: RwLock = RwLock::new(Logger { diff --git a/scylla-rust-wrapper/src/logging.rs b/scylla-rust-wrapper/src/logging.rs index 0bac907f..4a8603cb 100644 --- a/scylla-rust-wrapper/src/logging.rs +++ b/scylla-rust-wrapper/src/logging.rs @@ -1,4 +1,5 @@ use crate::argconv::{arr_to_cstr, ptr_to_cstr, ptr_to_ref, str_to_arr}; +use crate::cass_log_types::{CassLogLevel, CassLogMessage}; use crate::types::size_t; use crate::LOGGER; use std::convert::TryFrom; @@ -13,12 +14,6 @@ use tracing_subscriber::layer::Context; use tracing_subscriber::prelude::*; use tracing_subscriber::Layer; -mod cass_log { - #![allow(non_camel_case_types, non_snake_case)] - include!(concat!(env!("OUT_DIR"), "/cppdriver_log.rs")); -} -use cass_log::*; - pub type CassLogCallback = Option; From 5bab5cd0aeef5162062c6307376731770b158a25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Uzarski?= Date: Fri, 11 Oct 2024 14:20:04 +0200 Subject: [PATCH 15/15] mod: introduce cass_uuid_types module --- scylla-rust-wrapper/build.rs | 2 +- scylla-rust-wrapper/src/lib.rs | 12 ++++++++++++ scylla-rust-wrapper/src/metadata.rs | 3 +-- scylla-rust-wrapper/src/uuid.rs | 3 +-- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/scylla-rust-wrapper/build.rs b/scylla-rust-wrapper/build.rs index e00943f0..1aaecb69 100644 --- a/scylla-rust-wrapper/build.rs +++ b/scylla-rust-wrapper/build.rs @@ -132,7 +132,7 @@ fn main() { &out_path, ); prepare_cppdriver_data( - "cppdriver_data_uuid.rs", + "cppdriver_uuid_types.rs", &["CassUuid_", "CassUuid"], &out_path, ); diff --git a/scylla-rust-wrapper/src/lib.rs b/scylla-rust-wrapper/src/lib.rs index 47089690..9f027fdf 100644 --- a/scylla-rust-wrapper/src/lib.rs +++ b/scylla-rust-wrapper/src/lib.rs @@ -98,6 +98,18 @@ pub mod cass_log_types { include_bindgen_generated!("cppdriver_log_types.rs"); } +/// CassColumnType +pub mod cass_column_types { + include_bindgen_generated!("cppdriver_column_type.rs"); +} + +/// CassUuid +pub mod cass_uuid_types { + #![allow(non_camel_case_types, non_snake_case)] + + include_bindgen_generated!("cppdriver_uuid_types.rs"); +} + lazy_static! { pub static ref RUNTIME: Runtime = Runtime::new().unwrap(); pub static ref LOGGER: RwLock = RwLock::new(Logger { diff --git a/scylla-rust-wrapper/src/metadata.rs b/scylla-rust-wrapper/src/metadata.rs index aae0ecd0..2422cd55 100644 --- a/scylla-rust-wrapper/src/metadata.rs +++ b/scylla-rust-wrapper/src/metadata.rs @@ -1,4 +1,5 @@ use crate::argconv::*; +use crate::cass_column_types::CassColumnType; use crate::cass_types::get_column_type_from_cql_type; use crate::cass_types::CassDataType; use crate::types::*; @@ -8,8 +9,6 @@ use std::os::raw::c_char; use std::sync::Arc; use std::sync::Weak; -include!(concat!(env!("OUT_DIR"), "/cppdriver_column_type.rs")); - pub struct CassSchemaMeta { pub keyspaces: HashMap, } diff --git a/scylla-rust-wrapper/src/uuid.rs b/scylla-rust-wrapper/src/uuid.rs index 50a08ee7..52374dcc 100644 --- a/scylla-rust-wrapper/src/uuid.rs +++ b/scylla-rust-wrapper/src/uuid.rs @@ -1,4 +1,3 @@ -#![allow(non_camel_case_types, non_snake_case)] use crate::argconv::*; use crate::cass_error::CassError; use crate::types::*; @@ -11,7 +10,7 @@ use std::sync::atomic::{AtomicU64, Ordering}; use std::time::{SystemTime, UNIX_EPOCH}; use uuid::Uuid; -include!(concat!(env!("OUT_DIR"), "/cppdriver_data_uuid.rs")); +pub(crate) use crate::cass_uuid_types::CassUuid; pub struct CassUuidGen { pub clock_seq_and_node: cass_uint64_t,