use std::ptr;
use crate::{Batteries, Battery};
#[no_mangle]
pub unsafe extern "C" fn battery_iterator_next(ptr: *mut Batteries) -> *mut Battery {
assert!(!ptr.is_null());
let iterator = &mut *ptr;
match iterator.next() {
None => {
crate::errors::clear_last_error();
ptr::null_mut()
}
Some(Ok(battery)) => Box::into_raw(Box::new(battery)),
Some(Err(e)) => {
crate::errors::set_last_error(e);
ptr::null_mut()
}
}
}
#[no_mangle]
pub unsafe extern "C" fn battery_iterator_free(ptr: *mut Batteries) {
if ptr.is_null() {
return;
}
let _ = Box::from_raw(ptr);
}