Skip to content

Commit a661772

Browse files
authored
chore(c/sedona-geoarrow-c): Remove build time bindgen dependency for sedona-geoarrow-c (#220)
1 parent f157155 commit a661772

File tree

5 files changed

+115
-29
lines changed

5 files changed

+115
-29
lines changed

Cargo.lock

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

c/sedona-geoarrow-c/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ edition.workspace = true
2727
rust-version.workspace = true
2828

2929
[build-dependencies]
30-
bindgen = "0.71.0"
3130
cc = { version = "1" }
3231

3332
[dev-dependencies]

c/sedona-geoarrow-c/build.rs

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
// KIND, either express or implied. See the License for the
1515
// specific language governing permissions and limitations
1616
// under the License.
17-
use std::{env, path::PathBuf};
1817

1918
fn main() {
2019
println!("cargo:rerun-if-changed=src/geoarrow/double_parse_fast_float.cc");
@@ -38,17 +37,4 @@ fn main() {
3837
.flag("-DGEOARROW_NAMESPACE=SedonaDB")
3938
.flag("-DNANOARROW_NAMESPACE=SedonaDB")
4039
.compile("geoarrow_fast_float");
41-
42-
let bindings = bindgen::Builder::default()
43-
.header("src/geoarrow/geoarrow.h")
44-
.clang_arg("-DGEOARROW_NAMESPACE=SedonaDB")
45-
.parse_callbacks(Box::new(bindgen::CargoCallbacks::new()))
46-
.generate()
47-
.expect("Unable to generate bindings");
48-
49-
// Write the bindings to the $OUT_DIR/bindings.rs file.
50-
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
51-
bindings
52-
.write_to_file(out_path.join("bindings.rs"))
53-
.expect("Couldn't write bindings!");
5440
}

c/sedona-geoarrow-c/src/geoarrow_c.rs

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -265,15 +265,6 @@ impl Default for Visitor {
265265
}
266266
}
267267

268-
impl From<&str> for GeoArrowStringView {
269-
fn from(value: &str) -> Self {
270-
Self {
271-
data: value.as_ptr() as *const _,
272-
size_bytes: value.len() as i64,
273-
}
274-
}
275-
}
276-
277268
/// Convert a [SedonaType] to a GeoArrow type identifier
278269
fn geoarrow_type_id(sedona_type: &SedonaType) -> Result<GeoArrowType, GeoArrowCError> {
279270
let type_id = match sedona_type {
@@ -414,10 +405,10 @@ mod test {
414405
DataType::Utf8View
415406
);
416407

417-
let err = arrow_storage_type(GeoArrowType_GEOARROW_TYPE_LINESTRING).unwrap_err();
408+
let err = arrow_storage_type(0).unwrap_err();
418409
assert_eq!(
419410
err.to_string(),
420-
"Can't guess Arrow type from GeoArrowType with ID 2"
411+
"Can't guess Arrow type from GeoArrowType with ID 0"
421412
);
422413
}
423414
}

c/sedona-geoarrow-c/src/geoarrow_c_bindgen.rs

Lines changed: 113 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,117 @@
1717
#![allow(non_upper_case_globals)]
1818
#![allow(non_camel_case_types)]
1919
#![allow(non_snake_case)]
20-
#![allow(dead_code)]
2120

22-
include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
21+
use std::os::raw::{c_char, c_int, c_void};
22+
23+
#[repr(C)]
24+
pub struct ArrowArray {
25+
_private: [u8; 0],
26+
}
27+
28+
#[repr(C)]
29+
pub struct GeoArrowCoordView {
30+
_private: [u8; 0],
31+
}
32+
33+
#[cfg(target_env = "msvc")]
34+
pub type enum_t = std::os::raw::c_int;
35+
36+
#[cfg(not(target_env = "msvc"))]
37+
pub type enum_t = std::os::raw::c_uint;
38+
39+
pub type GeoArrowGeometryType = enum_t;
40+
pub type GeoArrowDimensions = enum_t;
41+
pub type GeoArrowType = enum_t;
42+
43+
pub const GeoArrowType_GEOARROW_TYPE_WKB: GeoArrowType = 100001;
44+
pub const GeoArrowType_GEOARROW_TYPE_WKT: GeoArrowType = 100003;
45+
pub const GeoArrowType_GEOARROW_TYPE_WKB_VIEW: GeoArrowType = 100005;
46+
pub const GeoArrowType_GEOARROW_TYPE_WKT_VIEW: GeoArrowType = 100006;
47+
48+
pub type GeoArrowErrorCode = c_int;
49+
50+
#[repr(C)]
51+
#[derive(Debug, Copy, Clone)]
52+
pub struct GeoArrowError {
53+
pub message: [c_char; 1024usize],
54+
}
55+
56+
#[repr(C)]
57+
#[derive(Debug, Copy, Clone)]
58+
pub struct GeoArrowVisitor {
59+
pub feat_start: Option<unsafe extern "C" fn(v: *mut GeoArrowVisitor) -> c_int>,
60+
pub null_feat: Option<unsafe extern "C" fn(v: *mut GeoArrowVisitor) -> c_int>,
61+
pub geom_start: Option<
62+
unsafe extern "C" fn(
63+
v: *mut GeoArrowVisitor,
64+
geometry_type: GeoArrowGeometryType,
65+
dimensions: GeoArrowDimensions,
66+
) -> c_int,
67+
>,
68+
pub ring_start: Option<unsafe extern "C" fn(v: *mut GeoArrowVisitor) -> c_int>,
69+
pub coords: Option<
70+
unsafe extern "C" fn(v: *mut GeoArrowVisitor, coords: *const GeoArrowCoordView) -> c_int,
71+
>,
72+
pub ring_end: Option<unsafe extern "C" fn(v: *mut GeoArrowVisitor) -> c_int>,
73+
pub geom_end: Option<unsafe extern "C" fn(v: *mut GeoArrowVisitor) -> c_int>,
74+
pub feat_end: Option<unsafe extern "C" fn(v: *mut GeoArrowVisitor) -> c_int>,
75+
pub private_data: *mut c_void,
76+
pub error: *mut GeoArrowError,
77+
}
78+
79+
#[repr(C)]
80+
#[derive(Debug, Copy, Clone)]
81+
pub struct GeoArrowArrayReader {
82+
pub private_data: *mut c_void,
83+
}
84+
85+
#[repr(C)]
86+
#[derive(Debug, Copy, Clone)]
87+
pub struct GeoArrowArrayWriter {
88+
pub private_data: *mut c_void,
89+
}
90+
91+
unsafe extern "C" {
92+
pub fn SedonaDBGeoArrowVersion() -> *const c_char;
93+
94+
pub fn SedonaDBGeoArrowVisitorInitVoid(v: *mut GeoArrowVisitor);
95+
96+
pub fn SedonaDBGeoArrowArrayReaderInitFromType(
97+
reader: *mut GeoArrowArrayReader,
98+
type_: GeoArrowType,
99+
) -> GeoArrowErrorCode;
100+
101+
pub fn SedonaDBGeoArrowArrayReaderSetArray(
102+
reader: *mut GeoArrowArrayReader,
103+
array: *const ArrowArray,
104+
error: *mut GeoArrowError,
105+
) -> GeoArrowErrorCode;
106+
107+
pub fn SedonaDBGeoArrowArrayReaderVisit(
108+
reader: *mut GeoArrowArrayReader,
109+
offset: i64,
110+
length: i64,
111+
v: *mut GeoArrowVisitor,
112+
) -> GeoArrowErrorCode;
113+
114+
pub fn SedonaDBGeoArrowArrayReaderReset(reader: *mut GeoArrowArrayReader);
115+
116+
pub fn SedonaDBGeoArrowArrayWriterInitFromType(
117+
writer: *mut GeoArrowArrayWriter,
118+
type_: GeoArrowType,
119+
) -> GeoArrowErrorCode;
120+
121+
pub fn SedonaDBGeoArrowArrayWriterInitVisitor(
122+
writer: *mut GeoArrowArrayWriter,
123+
v: *mut GeoArrowVisitor,
124+
) -> GeoArrowErrorCode;
125+
126+
pub fn SedonaDBGeoArrowArrayWriterFinish(
127+
writer: *mut GeoArrowArrayWriter,
128+
array: *mut ArrowArray,
129+
error: *mut GeoArrowError,
130+
) -> GeoArrowErrorCode;
131+
132+
pub fn SedonaDBGeoArrowArrayWriterReset(writer: *mut GeoArrowArrayWriter);
133+
}

0 commit comments

Comments
 (0)