themed-styler 1.2.4

Client-side runtime styling engine for web and Android/iOS Native with theme support and Tailwind subset
Documentation
use crate::bridge_common;
use std::ffi::{CStr, CString, c_char};
use std::ptr;

#[unsafe(no_mangle)]
pub extern "C" fn themed_styler_version() -> *const c_char {
    static VERSION: &str = concat!(env!("CARGO_PKG_VERSION"), "\0");
    VERSION.as_ptr() as *const c_char
}

#[unsafe(no_mangle)]
pub unsafe extern "C" fn themed_styler_render_css(
    usage_json: *const c_char,
    themes_json: *const c_char,
) -> *mut c_char {
    if usage_json.is_null() || themes_json.is_null() {
        return ptr::null_mut();
    }

    let usage_str = match unsafe { CStr::from_ptr(usage_json).to_str() } {
        Ok(s) => s,
        Err(_) => return ptr::null_mut(),
    };

    let themes_str = match unsafe { CStr::from_ptr(themes_json).to_str() } {
        Ok(s) => s,
        Err(_) => return ptr::null_mut(),
    };

    let snapshot = bridge_common::parse_usage_json(usage_str);
    let themes_input = bridge_common::parse_themes_json(themes_str);
    let state = bridge_common::build_state(snapshot, themes_input);
    let css = state.css_for_web();
    
    match CString::new(css) {
        Ok(c_str) => c_str.into_raw(),
        Err(_) => ptr::null_mut(),
    }
}

#[unsafe(no_mangle)]
pub unsafe extern "C" fn themed_styler_free_string(s: *mut c_char) {
    if !s.is_null() {
        unsafe { drop(CString::from_raw(s)) };
    }
}