rsolace 0.3.9

Solace bindings for the Rust
Documentation
use std::ffi::CString;

pub trait ConvertToCString {
    fn to_cstring(&self) -> CString;
}

impl ConvertToCString for bool {
    fn to_cstring(&self) -> CString {
        CString::new(format!("{}", *self as i32)).unwrap()
    }
}

impl ConvertToCString for u32 {
    fn to_cstring(&self) -> CString {
        CString::new(format!("{}", *self)).unwrap()
    }
}

impl ConvertToCString for i32 {
    fn to_cstring(&self) -> CString {
        CString::new(format!("{}", *self)).unwrap()
    }
}

impl ConvertToCString for &str {
    fn to_cstring(&self) -> CString {
        CString::new(*self).unwrap()
    }
}

pub fn prop2cstr<T: ConvertToCString>(prop: T) -> CString {
    prop.to_cstring()
}

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

    #[test]
    fn test_prop2cstr_bool() {
        let res = prop2cstr(true);
        assert_eq!(res, CString::new("1").unwrap());
    }

    #[test]
    fn test_prop2cstr_u32() {
        let res = prop2cstr(3000);
        assert_eq!(res, CString::new("3000").unwrap());
    }

    #[test]
    fn test_prop2cstr_str() {
        let res = prop2cstr("192.168.0.1");
        assert_eq!(res, CString::new("192.168.0.1").unwrap());
    }
}