bloomberg 0.2.0

Rust API for Bloomberg.
Documentation
use crate::bindings::*;
use crate::{event::Event, message::Message};
use std::marker::PhantomData;
use std::ptr;

pub struct MessageIterator<'a> {
    pub(crate) ptr: *mut blpapi_MessageIterator_t,
    _phantom: PhantomData<&'a Event>,
}

impl<'a> MessageIterator<'a> {
    pub fn new(event: &'a Event) -> Self {
        unsafe {
            let ptr: *mut blpapi_MessageIterator = blpapi_MessageIterator_create(event.0);

            MessageIterator {
                ptr,
                _phantom: PhantomData,
            }
        }
    }
}

impl<'a> Drop for MessageIterator<'a> {
    fn drop(&mut self) {
        unsafe { blpapi_MessageIterator_destroy(self.ptr) }
    }
}

impl<'a> Iterator for MessageIterator<'a> {
    type Item = Message<'a>;

    fn next(&mut self) -> Option<Message<'a>> {
        unsafe {
            let mut ptr: *mut blpapi_Message = ptr::null_mut();
            let res: i32 = blpapi_MessageIterator_next(self.ptr, &mut ptr as *mut _);

            if res == 0 {
                let elements: *mut blpapi_Element = blpapi_Message_elements(ptr);

                Some(Message {
                    ptr,
                    _phantom: PhantomData,
                    elements,
                })
            } else {
                None
            }
        }
    }
}