Skip to content

Commit db3555c

Browse files
committed
(deosn't compile) extract index binds to separate file
1 parent 993efb9 commit db3555c

File tree

2 files changed

+101
-87
lines changed

2 files changed

+101
-87
lines changed
+98
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
use eccodes_sys::codes_index;
2+
use std::{ffi::CString, ptr};
3+
4+
#[cfg(target_os = "macos")]
5+
type _SYS_IO_FILE = eccodes_sys::__sFILE;
6+
7+
#[cfg(not(target_os = "macos"))]
8+
type _SYS_IO_FILE = eccodes_sys::_IO_FILE;
9+
10+
use eccodes_sys::{codes_context, codes_handle};
11+
use num_traits::FromPrimitive;
12+
13+
use crate::errors::{CodesError, CodesInternal};
14+
15+
#[cfg(feature = "ec_index")]
16+
pub unsafe fn codes_index_read(filename: &str) -> Result<*mut codes_index, CodesError> {
17+
let filename = CString::new(filename).unwrap();
18+
let context: *mut codes_context = ptr::null_mut(); //default context
19+
let mut error_code: i32 = 0;
20+
21+
let codes_index = eccodes_sys::codes_index_read(context, filename.as_ptr(), &mut error_code);
22+
codes_index.drop_in_place();
23+
if error_code != 0 {
24+
let err: CodesInternal = FromPrimitive::from_i32(error_code).unwrap();
25+
return Err(err.into());
26+
}
27+
Ok(codes_index)
28+
}
29+
30+
#[cfg(feature = "ec_index")]
31+
pub unsafe fn codes_index_delete(index: *mut codes_index) -> Result<(), CodesError> {
32+
eccodes_sys::codes_index_delete(index);
33+
Ok(())
34+
}
35+
36+
#[cfg(feature = "ec_index")]
37+
pub unsafe fn codes_index_select_long(
38+
index: *mut codes_index,
39+
key: &str,
40+
value: i64,
41+
) -> Result<(), CodesError> {
42+
let key = CString::new(key).unwrap();
43+
let error_code = eccodes_sys::codes_index_select_long(index, key.as_ptr(), value);
44+
45+
if error_code != 0 {
46+
let err: CodesInternal = FromPrimitive::from_i32(error_code).unwrap();
47+
return Err(err.into());
48+
}
49+
Ok(())
50+
}
51+
52+
#[cfg(feature = "ec_index")]
53+
pub unsafe fn codes_index_select_double(
54+
index: *mut codes_index,
55+
key: &str,
56+
value: f64,
57+
) -> Result<(), CodesError> {
58+
let key = CString::new(key).unwrap();
59+
let error_code = eccodes_sys::codes_index_select_double(index, key.as_ptr(), value);
60+
61+
if error_code != 0 {
62+
let err: CodesInternal = FromPrimitive::from_i32(error_code).unwrap();
63+
return Err(err.into());
64+
}
65+
Ok(())
66+
}
67+
68+
#[cfg(feature = "ec_index")]
69+
pub unsafe fn codes_index_select_string(
70+
index: *mut codes_index,
71+
key: &str,
72+
value: &str,
73+
) -> Result<(), CodesError> {
74+
let key = CString::new(key).unwrap();
75+
let value = CString::new(value).unwrap();
76+
let error_code = eccodes_sys::codes_index_select_string(index, key.as_ptr(), value.as_ptr());
77+
78+
if error_code != 0 {
79+
let err: CodesInternal = FromPrimitive::from_i32(error_code).unwrap();
80+
return Err(err.into());
81+
}
82+
Ok(())
83+
}
84+
85+
#[cfg(feature = "ec_index")]
86+
pub unsafe fn codes_handle_new_from_index(
87+
index: *mut codes_index,
88+
) -> Result<*mut codes_handle, CodesError> {
89+
let mut error_code: i32 = 0;
90+
91+
let codes_handle = eccodes_sys::codes_handle_new_from_index(index, &mut error_code);
92+
93+
if error_code != 0 {
94+
let err: CodesInternal = FromPrimitive::from_i32(error_code).unwrap();
95+
return Err(err.into());
96+
}
97+
Ok(codes_handle)
98+
}

src/intermediate_bindings.rs src/intermediate_bindings/mod.rs

+3-87
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
//!to make ecCodes usage safer and easier,
88
//!but they are unsafe as they operate on raw `codes_handle`.
99
10+
#[cfg(feature = "ec_index")]
11+
pub(crate) mod codes_index;
12+
1013
use std::{
1114
ffi::{CStr, CString},
1215
ptr::{self, addr_of_mut},
@@ -18,8 +21,6 @@ type _SYS_IO_FILE = eccodes_sys::__sFILE;
1821
#[cfg(not(target_os = "macos"))]
1922
type _SYS_IO_FILE = eccodes_sys::_IO_FILE;
2023

21-
#[cfg(feature = "ec_index")]
22-
use eccodes_sys::codes_index;
2324
use eccodes_sys::{
2425
codes_context, codes_handle, codes_keys_iterator, codes_nearest, CODES_NEAREST_SAME_DATA,
2526
CODES_NEAREST_SAME_GRID, CODES_TYPE_BYTES, CODES_TYPE_DOUBLE, CODES_TYPE_LABEL,
@@ -331,91 +332,6 @@ pub unsafe fn codes_handle_new_from_message_copy(message_buffer: &[u8]) -> *mut
331332
)
332333
}
333334

334-
#[cfg(feature = "ec_index")]
335-
pub unsafe fn codes_index_read(filename: &str) -> Result<*mut codes_index, CodesError> {
336-
let filename = CString::new(filename).unwrap();
337-
let context: *mut codes_context = ptr::null_mut(); //default context
338-
let mut error_code: i32 = 0;
339-
340-
let codes_index = eccodes_sys::codes_index_read(context, filename.as_ptr(), &mut error_code);
341-
codes_index.drop_in_place();
342-
if error_code != 0 {
343-
let err: CodesInternal = FromPrimitive::from_i32(error_code).unwrap();
344-
return Err(err.into());
345-
}
346-
Ok(codes_index)
347-
}
348-
349-
#[cfg(feature = "ec_index")]
350-
pub unsafe fn codes_index_delete(index: *mut codes_index) -> Result<(), CodesError> {
351-
eccodes_sys::codes_index_delete(index);
352-
Ok(())
353-
}
354-
355-
#[cfg(feature = "ec_index")]
356-
pub unsafe fn codes_index_select_long(
357-
index: *mut codes_index,
358-
key: &str,
359-
value: i64,
360-
) -> Result<(), CodesError> {
361-
let key = CString::new(key).unwrap();
362-
let error_code = eccodes_sys::codes_index_select_long(index, key.as_ptr(), value);
363-
364-
if error_code != 0 {
365-
let err: CodesInternal = FromPrimitive::from_i32(error_code).unwrap();
366-
return Err(err.into());
367-
}
368-
Ok(())
369-
}
370-
371-
#[cfg(feature = "ec_index")]
372-
pub unsafe fn codes_index_select_double(
373-
index: *mut codes_index,
374-
key: &str,
375-
value: f64,
376-
) -> Result<(), CodesError> {
377-
let key = CString::new(key).unwrap();
378-
let error_code = eccodes_sys::codes_index_select_double(index, key.as_ptr(), value);
379-
380-
if error_code != 0 {
381-
let err: CodesInternal = FromPrimitive::from_i32(error_code).unwrap();
382-
return Err(err.into());
383-
}
384-
Ok(())
385-
}
386-
387-
#[cfg(feature = "ec_index")]
388-
pub unsafe fn codes_index_select_string(
389-
index: *mut codes_index,
390-
key: &str,
391-
value: &str,
392-
) -> Result<(), CodesError> {
393-
let key = CString::new(key).unwrap();
394-
let value = CString::new(value).unwrap();
395-
let error_code = eccodes_sys::codes_index_select_string(index, key.as_ptr(), value.as_ptr());
396-
397-
if error_code != 0 {
398-
let err: CodesInternal = FromPrimitive::from_i32(error_code).unwrap();
399-
return Err(err.into());
400-
}
401-
Ok(())
402-
}
403-
404-
#[cfg(feature = "ec_index")]
405-
pub unsafe fn codes_handle_new_from_index(
406-
index: *mut codes_index,
407-
) -> Result<*mut codes_handle, CodesError> {
408-
let mut error_code: i32 = 0;
409-
410-
let codes_handle = eccodes_sys::codes_handle_new_from_index(index, &mut error_code);
411-
412-
if error_code != 0 {
413-
let err: CodesInternal = FromPrimitive::from_i32(error_code).unwrap();
414-
return Err(err.into());
415-
}
416-
Ok(codes_handle)
417-
}
418-
419335
pub unsafe fn codes_keys_iterator_new(
420336
handle: *mut codes_handle,
421337
flags: u32,

0 commit comments

Comments
 (0)