bloomberg 0.2.0

Rust API for Bloomberg.
Documentation
use crate::bindings::*;
use crate::{correlation_id::CorrelationId, element::Element, event::Event, name::Name};
use std::ffi::CStr;
use std::marker::PhantomData;

pub struct Message<'a> {
    pub(crate) ptr: *mut blpapi_Message_t,
    pub(crate) _phantom: PhantomData<&'a Event>,
    pub(crate) elements: *mut blpapi_Element_t,
}

impl<'a> Message<'a> {
    pub fn topic_name(&self) -> String {
        unsafe {
            let name: *const i8 = blpapi_Message_topicName(self.ptr);

            CStr::from_ptr(name).to_string_lossy().into_owned()
        }
    }

    pub fn type_string(&self) -> String {
        unsafe {
            let name: *const i8 = blpapi_Message_typeString(self.ptr);

            CStr::from_ptr(name).to_string_lossy().into_owned()
        }
    }

    pub fn message_type(&self) -> Name {
        unsafe {
            let ptr: *mut blpapi_Name = blpapi_Message_messageType(self.ptr);

            Name(ptr)
        }
    }

    pub fn num_correlation_ids(&self) -> usize {
        unsafe { blpapi_Message_numCorrelationIds(self.ptr) as usize }
    }

    pub fn correlation_id(&self, index: usize) -> Option<CorrelationId> {
        if index > self.num_correlation_ids() {
            None
        } else {
            unsafe {
                let ptr: blpapi_CorrelationId_t_ = blpapi_Message_correlationId(self.ptr, index);

                Some(CorrelationId(ptr))
            }
        }
    }

    pub fn element(&self) -> Element {
        Element { ptr: self.elements }
    }
}