babeltrace2-sys 0.2.8

Rust sys crate for babeltrace2
use crate::{ffi, util, BtResult, ClockClassProperties, Error, Trace};

pub struct Stream {
    pub(crate) inner: *const ffi::bt_stream,
}

impl Stream {
    pub fn properties(&self) -> BtResult<StreamProperties> {
        let id = unsafe { ffi::bt_stream_get_id(self.inner) };
        let name_cstr = unsafe { ffi::bt_stream_get_name(self.inner) };
        let name = util::opt_owned_cstr(name_cstr)?;
        let class = unsafe { ffi::bt_stream_borrow_class_const(self.inner) };
        let clock_class = unsafe { ffi::bt_stream_class_borrow_default_clock_class_const(class) };
        let clock = ClockClassProperties::from_raw(clock_class)?;
        Ok(StreamProperties { id, name, clock })
    }

    pub fn trace(&self) -> BtResult<Trace> {
        let trace = unsafe { ffi::bt_stream_borrow_trace_const(self.inner) };
        if trace.is_null() {
            Err(Error::ResourceBorrow)
        } else {
            Ok(Trace { inner: trace })
        }
    }
}

pub type StreamId = u64;

#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)]
pub struct StreamProperties {
    pub id: StreamId,
    pub name: Option<String>,
    pub clock: Option<ClockClassProperties>,
}