redirectionio 3.1.0

Redirection IO Library to handle matching rule, redirect and filtering headers and body.
Documentation
use std::{
    ffi::{CStr, CString},
    os::raw::c_char,
    ptr::null,
};

pub fn c_char_to_str<'a>(ptr: *const c_char) -> Option<&'a str> {
    if ptr.is_null() {
        return None;
    }

    // SAFETY: ptr is a valid pointer to a C string
    let cstr = unsafe { CStr::from_ptr(ptr) };

    match cstr.to_str() {
        Err(error) => {
            tracing::error!(
                "unable to create string for '{}': {}",
                String::from_utf8_lossy(cstr.to_bytes()),
                error,
            );

            None
        }
        Ok(string) => Some(string),
    }
}

pub fn string_to_c_char(str: String) -> *const c_char {
    let string = match CString::new(str.as_str()) {
        Err(error) => {
            tracing::error!("cannot create c string {str}: {error}");

            return null();
        }
        Ok(string) => string,
    };

    string.into_raw()
}