use std::ffi::{CStr, CString, c_char};
use crate::{ParseOptions, parse};
#[unsafe(no_mangle)]
pub unsafe extern "C" fn ironmark_parse(input: *const c_char) -> *mut c_char {
if input.is_null() {
return std::ptr::null_mut();
}
let c_str = unsafe { CStr::from_ptr(input) };
let Ok(markdown) = c_str.to_str() else {
return std::ptr::null_mut();
};
let html = parse(markdown, &ParseOptions::default());
match CString::new(html) {
Ok(c) => c.into_raw(),
Err(_) => std::ptr::null_mut(),
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn ironmark_free(ptr: *mut c_char) {
if !ptr.is_null() {
drop(unsafe { CString::from_raw(ptr) });
}
}