|
1 | 1 | //! Definition and constructors of `CodesHandle` |
2 | 2 | //! used for accessing GRIB files |
3 | 3 |
|
4 | | -#[cfg(feature = "experimental_index")] |
5 | | -use crate::codes_index::CodesIndex; |
6 | 4 | use crate::{CodesError, intermediate_bindings::codes_handle_new_from_file, pointer_guard}; |
7 | 5 | use eccodes_sys::{ProductKind_PRODUCT_GRIB, codes_handle}; |
8 | 6 | use errno::errno; |
@@ -250,45 +248,6 @@ impl CodesFile<CodesFileSource<Vec<u8>>> { |
250 | 248 | } |
251 | 249 | } |
252 | 250 |
|
253 | | -#[cfg(feature = "experimental_index")] |
254 | | -#[cfg_attr(docsrs, doc(cfg(feature = "experimental_index")))] |
255 | | -impl CodesFile<CodesIndex> { |
256 | | - /// Creates [`CodesHandle`] for provided [`CodesIndex`]. |
257 | | - /// |
258 | | - /// ## Example |
259 | | - /// |
260 | | - /// ``` |
261 | | - /// # fn run() -> anyhow::Result<()> { |
262 | | - /// # use eccodes::{CodesHandle, CodesIndex}; |
263 | | - /// # |
264 | | - /// let index = CodesIndex::new_from_keys(&vec!["shortName", "typeOfLevel", "level"])?; |
265 | | - /// let handle = CodesHandle::new_from_index(index)?; |
266 | | - /// |
267 | | - /// Ok(()) |
268 | | - /// # } |
269 | | - /// ``` |
270 | | - /// |
271 | | - /// The function takes ownership of the provided [`CodesIndex`] which owns |
272 | | - /// the GRIB data. [`CodesHandle`] created from [`CodesIndex`] is of different type |
273 | | - /// than the one created from file or memory buffer, because it internally uses |
274 | | - /// different functions to access messages. But it can be used in the same way. |
275 | | - /// |
276 | | - /// ⚠️ Warning: This function may interfere with other functions in concurrent context, |
277 | | - /// due to ecCodes issues with thread-safety for indexes. More information can be found |
278 | | - /// in [`codes_index`](crate::codes_index) module documentation. |
279 | | - /// |
280 | | - /// ## Errors |
281 | | - /// |
282 | | - /// Returns [`CodesError::Internal`] with error code |
283 | | - /// when internal [`codes_handle`] cannot be created. |
284 | | - #[instrument(level = "trace")] |
285 | | - pub fn new_from_index(index: CodesIndex) -> Result<Self, CodesError> { |
286 | | - let new_handle = CodesFile { source: index }; |
287 | | - |
288 | | - Ok(new_handle) |
289 | | - } |
290 | | -} |
291 | | - |
292 | 251 | #[instrument(level = "trace")] |
293 | 252 | fn open_with_fdopen(file: &File) -> Result<*mut FILE, CodesError> { |
294 | 253 | let file_ptr = unsafe { libc::fdopen(file.as_raw_fd(), "r".as_ptr().cast::<c_char>()) }; |
@@ -328,8 +287,6 @@ fn open_with_fmemopen(file_data: &[u8]) -> Result<*mut FILE, CodesError> { |
328 | 287 | #[cfg(test)] |
329 | 288 | mod tests { |
330 | 289 | use crate::codes_handle::{CodesFile, ProductKind}; |
331 | | - #[cfg(feature = "experimental_index")] |
332 | | - use crate::codes_index::{CodesIndex, Select}; |
333 | 290 | use anyhow::{Context, Result}; |
334 | 291 | use eccodes_sys::ProductKind_PRODUCT_GRIB; |
335 | 292 | use fallible_iterator::FallibleIterator; |
@@ -371,27 +328,6 @@ mod tests { |
371 | 328 | Ok(()) |
372 | 329 | } |
373 | 330 |
|
374 | | - #[test] |
375 | | - #[cfg(feature = "experimental_index")] |
376 | | - fn index_constructor_and_destructor() -> Result<()> { |
377 | | - use anyhow::Ok; |
378 | | - |
379 | | - let file_path = Path::new("./data/iceland-surface.grib.idx"); |
380 | | - let index = CodesIndex::read_from_file(file_path)? |
381 | | - .select("shortName", "2t")? |
382 | | - .select("typeOfLevel", "surface")? |
383 | | - .select("level", 0)? |
384 | | - .select("stepType", "instant")?; |
385 | | - |
386 | | - let i_ptr = index.pointer.clone(); |
387 | | - |
388 | | - let handle = CodesFile::new_from_index(index)?; |
389 | | - |
390 | | - assert_eq!(handle.source.pointer, i_ptr); |
391 | | - |
392 | | - Ok(()) |
393 | | - } |
394 | | - |
395 | 331 | #[test] |
396 | 332 | fn codes_handle_drop_file() -> Result<()> { |
397 | 333 | let file_path = Path::new("./data/iceland-surface.grib"); |
@@ -425,72 +361,10 @@ mod tests { |
425 | 361 |
|
426 | 362 | let mut handle = CodesFile::new_from_file(file_path, product_kind)?; |
427 | 363 |
|
428 | | - let _ref_msg = handle |
429 | | - .ref_message_iter() |
430 | | - .next()? |
431 | | - .context("no message")?; |
| 364 | + let _ref_msg = handle.ref_message_iter().next()?.context("no message")?; |
432 | 365 | let mut clone_msg = _ref_msg.try_clone()?; |
433 | 366 | drop(_ref_msg); |
434 | | - let _oth_ref = handle |
435 | | - .ref_message_iter() |
436 | | - .next()? |
437 | | - .context("no message")?; |
438 | | - |
439 | | - let _nrst = clone_msg.codes_nearest()?; |
440 | | - drop(_nrst); |
441 | | - let _kiter = clone_msg.default_keys_iterator()?; |
442 | | - } |
443 | | - |
444 | | - Ok(()) |
445 | | - } |
446 | | - |
447 | | - #[test] |
448 | | - #[cfg(feature = "experimental_index")] |
449 | | - fn codes_handle_drop_index() -> Result<()> { |
450 | | - let file_path = Path::new("./data/iceland-surface.grib.idx"); |
451 | | - let index = CodesIndex::read_from_file(file_path)?; |
452 | | - assert!(!index.pointer.is_null()); |
453 | | - |
454 | | - let handle = CodesFile::new_from_index(index)?; |
455 | | - drop(handle); |
456 | | - |
457 | | - Ok(()) |
458 | | - } |
459 | | - |
460 | | - #[test] |
461 | | - #[cfg(feature = "experimental_index")] |
462 | | - fn empty_index_constructor() -> Result<()> { |
463 | | - let index = |
464 | | - CodesIndex::new_from_keys(&vec!["shortName", "typeOfLevel", "level", "stepType"])?; |
465 | | - |
466 | | - let mut handle = CodesFile::new_from_index(index)?; |
467 | | - |
468 | | - assert!(!handle.source.pointer.is_null()); |
469 | | - |
470 | | - let msg = handle.ref_message_generator().next()?; |
471 | | - |
472 | | - assert!(!msg.is_some()); |
473 | | - |
474 | | - Ok(()) |
475 | | - } |
476 | | - |
477 | | - #[test] |
478 | | - #[cfg(feature = "experimental_index")] |
479 | | - fn multiple_drops_with_index() -> Result<()> { |
480 | | - { |
481 | | - let keys = vec!["typeOfLevel", "level"]; |
482 | | - let index = CodesIndex::new_from_keys(&keys)?; |
483 | | - let grib_path = Path::new("./data/iceland-levels.grib"); |
484 | | - let index = index |
485 | | - .add_grib_file(grib_path)? |
486 | | - .select("typeOfLevel", "isobaricInhPa")? |
487 | | - .select("level", 600)?; |
488 | | - |
489 | | - let mut handle = CodesFile::new_from_index(index)?; |
490 | | - let mut mgen = handle.ref_message_generator(); |
491 | | - let _ref_msg = mgen.next()?.context("no message")?; |
492 | | - let mut clone_msg = _ref_msg.try_clone()?; |
493 | | - let _oth_ref = mgen.next()?.context("no message")?; |
| 367 | + let _oth_ref = handle.ref_message_iter().next()?.context("no message")?; |
494 | 368 |
|
495 | 369 | let _nrst = clone_msg.codes_nearest()?; |
496 | 370 | drop(_nrst); |
|
0 commit comments