Skip to content

Commit 3bb9a49

Browse files
authored
Merge pull request #188 from muzarski/fix-bindgen-sizet
build: generate bindings for basic types
2 parents 2531c5f + 5bab5cd commit 3bb9a49

File tree

14 files changed

+120
-65
lines changed

14 files changed

+120
-65
lines changed

scylla-rust-wrapper/build.rs

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,25 @@ fn prepare_basic_types(out_path: &Path) {
2727
.parse_callbacks(Box::new(bindgen::CargoCallbacks))
2828
.layout_tests(true)
2929
.generate_comments(false)
30+
.allowlist_type("cass_bool_t")
31+
// cass_bool_t enum variants represented as constants.
32+
.constified_enum("cass_bool_t")
33+
// cass_[false/true] instead of cass_bool_t_cass_[*].
34+
.prepend_enum_name(false)
35+
.allowlist_type("cass_float_t")
36+
.allowlist_type("cass_double_t")
37+
.allowlist_type("cass_int8_t")
38+
.allowlist_type("cass_uint8_t")
39+
.allowlist_type("cass_int16_t")
40+
.allowlist_type("cass_uint16_t")
41+
.allowlist_type("cass_int32_t")
42+
.allowlist_type("cass_uint32_t")
43+
.allowlist_type("cass_int64_t")
44+
.allowlist_type("cass_uint64_t")
45+
.allowlist_type("cass_byte_t")
46+
.allowlist_type("cass_duration_t")
3047
.allowlist_type("size_t")
48+
.size_t_is_usize(false)
3149
.generate()
3250
.expect("Unable to generate bindings");
3351

@@ -67,22 +85,29 @@ fn main() {
6785
prepare_basic_types(&out_path);
6886

6987
prepare_cppdriver_data(
70-
"cppdriver_data_errors.rs",
88+
"cppdriver_error_types.rs",
7189
&[
7290
"CassErrorSource_",
7391
"CassErrorSource",
7492
"CassError_",
7593
"CassError",
94+
"CassWriteType",
95+
"CassWriteType_",
7696
],
7797
&out_path,
7898
);
99+
prepare_cppdriver_data(
100+
"cppdriver_consistency_types.rs",
101+
&["CassConsistency_", "CassConsistency"],
102+
&out_path,
103+
);
79104
prepare_cppdriver_data(
80105
"cppdriver_batch_types.rs",
81106
&["CassBatchType_", "CassBatchType"],
82107
&out_path,
83108
);
84109
prepare_cppdriver_data(
85-
"cppdriver_data_collection.rs",
110+
"cppdriver_collection_types.rs",
86111
&["CassCollectionType_", "CassCollectionType"],
87112
&out_path,
88113
);
@@ -92,12 +117,12 @@ fn main() {
92117
&out_path,
93118
);
94119
prepare_cppdriver_data(
95-
"cppdriver_data_inet.rs",
120+
"cppdriver_inet_types.rs",
96121
&["CassInet_", "CassInet"],
97122
&out_path,
98123
);
99124
prepare_cppdriver_data(
100-
"cppdriver_log.rs",
125+
"cppdriver_log_types.rs",
101126
&[
102127
"CassLogLevel_",
103128
"CassLogLevel",
@@ -107,17 +132,7 @@ fn main() {
107132
&out_path,
108133
);
109134
prepare_cppdriver_data(
110-
"cppdriver_data_query_error.rs",
111-
&[
112-
"CassConsistency_",
113-
"CassConsistency",
114-
"CassWriteType",
115-
"CassWriteType_",
116-
],
117-
&out_path,
118-
);
119-
prepare_cppdriver_data(
120-
"cppdriver_data_uuid.rs",
135+
"cppdriver_uuid_types.rs",
121136
&["CassUuid_", "CassUuid"],
122137
&out_path,
123138
);

scylla-rust-wrapper/src/cass_error.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use scylla::transport::errors::*;
22

3-
include!(concat!(env!("OUT_DIR"), "/cppdriver_data_errors.rs"));
3+
// Re-export error types.
4+
pub(crate) use crate::cass_error_types::{CassError, CassErrorSource};
45

56
impl From<&QueryError> for CassError {
67
fn from(error: &QueryError) -> Self {

scylla-rust-wrapper/src/cass_types.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ use std::os::raw::c_char;
1111
use std::ptr;
1212
use std::sync::Arc;
1313

14-
include!(concat!(env!("OUT_DIR"), "/cppdriver_data_types.rs"));
15-
include!(concat!(env!("OUT_DIR"), "/cppdriver_data_query_error.rs"));
16-
include!(concat!(env!("OUT_DIR"), "/cppdriver_batch_types.rs"));
14+
pub(crate) use crate::cass_batch_types::CassBatchType;
15+
pub(crate) use crate::cass_consistency_types::CassConsistency;
16+
pub(crate) use crate::cass_data_types::CassValueType;
1717

1818
#[derive(Clone, Debug, PartialEq, Eq)]
1919
pub struct UDTDataType {

scylla-rust-wrapper/src/cluster.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use std::os::raw::{c_char, c_int, c_uint};
2626
use std::sync::Arc;
2727
use std::time::Duration;
2828

29-
include!(concat!(env!("OUT_DIR"), "/cppdriver_compression_types.rs"));
29+
use crate::cass_compression_types::CassCompressionType;
3030

3131
// According to `cassandra.h` the default CPP driver's
3232
// - consistency for statements is LOCAL_ONE,

scylla-rust-wrapper/src/collection.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use crate::cass_collection_types::CassCollectionType;
12
use crate::cass_error::CassError;
23
use crate::cass_types::{CassDataType, MapDataType};
34
use crate::types::*;
@@ -6,8 +7,6 @@ use crate::{argconv::*, value};
67
use std::convert::TryFrom;
78
use std::sync::Arc;
89

9-
include!(concat!(env!("OUT_DIR"), "/cppdriver_data_collection.rs"));
10-
1110
// These constants help us to save an allocation in case user calls `cass_collection_new` (untyped collection).
1211
static UNTYPED_LIST_TYPE: CassDataType = CassDataType::List {
1312
typ: None,
Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,4 @@
1-
#![allow(non_camel_case_types)]
2-
3-
// Definition for size_t (and possibly other types in the future)
4-
include!(concat!(env!("OUT_DIR"), "/basic_types.rs"));
5-
6-
pub type cass_bool_t = ::std::os::raw::c_uint;
7-
pub type cass_float_t = f32;
8-
pub type cass_double_t = f64;
9-
pub type cass_int8_t = i8;
10-
pub type cass_uint8_t = u8;
11-
pub type cass_int16_t = i16;
12-
pub type cass_uint16_t = u16;
13-
pub type cass_int32_t = i32;
14-
pub type cass_uint32_t = u32;
15-
pub type cass_int64_t = i64;
16-
pub type cass_uint64_t = u64;
17-
pub type cass_byte_t = cass_uint8_t;
18-
pub type cass_duration_t = cass_uint64_t;
19-
pub type size_t = cass_uint64_t;
1+
use crate::types::{cass_int64_t, cass_uint32_t};
202

213
// Implementation directly ported from Cpp Driver implementation:
224

@@ -45,8 +27,3 @@ pub unsafe extern "C" fn cass_date_time_to_epoch(
4527
(((date as u64) - CASS_DATE_EPOCH) * (NUM_SECONDS_PER_DAY as u64)
4628
+ ((time / CASS_TIME_NANOSECONDS_PER_SECOND) as u64)) as i64
4729
}
48-
49-
#[allow(non_upper_case_globals)]
50-
pub const cass_false: cass_bool_t = 0;
51-
#[allow(non_upper_case_globals)]
52-
pub const cass_true: cass_bool_t = 1;

scylla-rust-wrapper/src/inet.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
#![allow(non_camel_case_types, non_snake_case)]
21
use crate::argconv::*;
32
use crate::cass_error::CassError;
43
use crate::types::*;
@@ -11,7 +10,7 @@ use std::os::raw::c_char;
1110
use std::slice::from_raw_parts;
1211
use std::str::FromStr;
1312

14-
include!(concat!(env!("OUT_DIR"), "/cppdriver_data_inet.rs"));
13+
pub(crate) use crate::cass_inet_types::CassInet;
1514

1615
#[repr(u8)] // address_length field in CassInet is cass_uint8_t
1716
#[allow(non_camel_case_types)]

scylla-rust-wrapper/src/lib.rs

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ pub mod cass_error;
1414
pub mod cass_types;
1515
pub mod cluster;
1616
pub mod collection;
17+
pub mod date_time;
1718
pub mod exec_profile;
1819
mod external;
1920
pub mod future;
@@ -32,11 +33,83 @@ pub mod statement;
3233
#[cfg(test)]
3334
pub mod testing;
3435
pub mod tuple;
35-
pub mod types;
3636
pub mod user_type;
3737
pub mod uuid;
3838
pub mod value;
3939

40+
/// Includes a file generated by bindgen called `filename`.
41+
macro_rules! include_bindgen_generated {
42+
($filename:expr) => {
43+
include!(concat!(env!("OUT_DIR"), '/', $filename));
44+
};
45+
}
46+
47+
/// All numeric types are defined here.
48+
pub mod types {
49+
#![allow(non_camel_case_types)]
50+
// for `cass_false` and `cass_true` globals.
51+
#![allow(non_upper_case_globals)]
52+
53+
// Definition for size_t (and possibly other types in the future)
54+
include_bindgen_generated!("basic_types.rs");
55+
}
56+
57+
/// CassError, CassErrorSource, CassWriteType
58+
pub mod cass_error_types {
59+
include_bindgen_generated!("cppdriver_error_types.rs");
60+
}
61+
62+
/// CassValueType
63+
pub mod cass_data_types {
64+
include_bindgen_generated!("cppdriver_data_types.rs");
65+
}
66+
67+
/// CassConsistency
68+
pub mod cass_consistency_types {
69+
include_bindgen_generated!("cppdriver_consistency_types.rs");
70+
}
71+
72+
/// CassBatchType
73+
pub mod cass_batch_types {
74+
include_bindgen_generated!("cppdriver_batch_types.rs");
75+
}
76+
77+
/// CassCompressionType
78+
pub mod cass_compression_types {
79+
include_bindgen_generated!("cppdriver_compression_types.rs");
80+
}
81+
82+
/// CassCollectionType
83+
pub mod cass_collection_types {
84+
include_bindgen_generated!("cppdriver_collection_types.rs");
85+
}
86+
87+
/// CassInet
88+
pub mod cass_inet_types {
89+
#![allow(non_camel_case_types, non_snake_case)]
90+
91+
include_bindgen_generated!("cppdriver_inet_types.rs");
92+
}
93+
94+
/// CassLogLevel, CassLogMessage
95+
pub mod cass_log_types {
96+
#![allow(non_camel_case_types, non_snake_case)]
97+
98+
include_bindgen_generated!("cppdriver_log_types.rs");
99+
}
100+
101+
/// CassColumnType
102+
pub mod cass_column_types {
103+
include_bindgen_generated!("cppdriver_column_type.rs");
104+
}
105+
106+
/// CassUuid
107+
pub mod cass_uuid_types {
108+
#![allow(non_camel_case_types, non_snake_case)]
109+
110+
include_bindgen_generated!("cppdriver_uuid_types.rs");
111+
}
112+
40113
lazy_static! {
41114
pub static ref RUNTIME: Runtime = Runtime::new().unwrap();
42115
pub static ref LOGGER: RwLock<Logger> = RwLock::new(Logger {

scylla-rust-wrapper/src/logging.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use crate::argconv::{arr_to_cstr, ptr_to_cstr, ptr_to_ref, str_to_arr};
2+
use crate::cass_log_types::{CassLogLevel, CassLogMessage};
23
use crate::types::size_t;
34
use crate::LOGGER;
45
use std::convert::TryFrom;
@@ -13,12 +14,6 @@ use tracing_subscriber::layer::Context;
1314
use tracing_subscriber::prelude::*;
1415
use tracing_subscriber::Layer;
1516

16-
mod cass_log {
17-
#![allow(non_camel_case_types, non_snake_case)]
18-
include!(concat!(env!("OUT_DIR"), "/cppdriver_log.rs"));
19-
}
20-
use cass_log::*;
21-
2217
pub type CassLogCallback =
2318
Option<unsafe extern "C" fn(message: *const CassLogMessage, data: *mut c_void)>;
2419

scylla-rust-wrapper/src/metadata.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use crate::argconv::*;
2+
use crate::cass_column_types::CassColumnType;
23
use crate::cass_types::get_column_type_from_cql_type;
34
use crate::cass_types::CassDataType;
45
use crate::types::*;
@@ -8,8 +9,6 @@ use std::os::raw::c_char;
89
use std::sync::Arc;
910
use std::sync::Weak;
1011

11-
include!(concat!(env!("OUT_DIR"), "/cppdriver_column_type.rs"));
12-
1312
pub struct CassSchemaMeta {
1413
pub keyspaces: HashMap<String, CassKeyspaceMeta>,
1514
}

0 commit comments

Comments
 (0)