rclrust 0.0.2

ROS2 client written in Rust
use crate::error::ToRclRustResult;
use crate::log::Logger;
use crate::rclrust_error;

#[derive(Debug)]
pub(crate) struct RclNodeOptions(rcl_sys::rcl_node_options_t);

unsafe impl Send for RclNodeOptions {}

impl RclNodeOptions {
    pub const fn raw(&self) -> &rcl_sys::rcl_node_options_t {
        &self.0
    }
}

impl Default for RclNodeOptions {
    fn default() -> Self {
        Self(unsafe { rcl_sys::rcl_node_get_default_options() })
    }
}

impl Drop for RclNodeOptions {
    fn drop(&mut self) {
        if let Err(e) = unsafe { rcl_sys::rcl_node_options_fini(&mut self.0).to_result() } {
            rclrust_error!(
                Logger::new("rclrust"),
                "Failed to clean up rcl node init options: {}",
                e
            )
        }
    }
}

#[derive(Debug, Default)]
pub struct NodeOptions {
    options: RclNodeOptions,
}

impl NodeOptions {
    pub fn new() -> Self {
        Default::default()
    }

    pub(crate) const fn raw(&self) -> &rcl_sys::rcl_node_options_t {
        self.options.raw()
    }
}

#[cfg(test)]
mod test {
    use super::*;

    #[test]
    fn test_node_options_new() {
        let _options = NodeOptions::new();
    }
}