use std::os::raw::c_char;
use crate::ffi_apis::common::from_json_string;
use crate::ffi_apis::common::to_c_string;
use crate::ffi_apis::common::to_json_string;
use crate::symbolic::core::Expr;
use crate::symbolic::elementary;
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rssn_sin_json(json_expr: *const c_char) -> *mut c_char {
let expr: Expr = match from_json_string(json_expr) {
| Some(e) => e,
| None => return std::ptr::null_mut(),
};
to_json_string(&elementary::sin(expr))
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rssn_cos_json(json_expr: *const c_char) -> *mut c_char {
let expr: Expr = match from_json_string(json_expr) {
| Some(e) => e,
| None => return std::ptr::null_mut(),
};
to_json_string(&elementary::cos(expr))
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rssn_tan_json(json_expr: *const c_char) -> *mut c_char {
let expr: Expr = match from_json_string(json_expr) {
| Some(e) => e,
| None => return std::ptr::null_mut(),
};
to_json_string(&elementary::tan(expr))
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rssn_exp_json(json_expr: *const c_char) -> *mut c_char {
let expr: Expr = match from_json_string(json_expr) {
| Some(e) => e,
| None => return std::ptr::null_mut(),
};
to_json_string(&elementary::exp(expr))
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rssn_ln_json(json_expr: *const c_char) -> *mut c_char {
let expr: Expr = match from_json_string(json_expr) {
| Some(e) => e,
| None => return std::ptr::null_mut(),
};
to_json_string(&elementary::ln(expr))
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rssn_sqrt_json(json_expr: *const c_char) -> *mut c_char {
let expr: Expr = match from_json_string(json_expr) {
| Some(e) => e,
| None => return std::ptr::null_mut(),
};
to_json_string(&elementary::sqrt(expr))
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rssn_pow_json(
json_base: *const c_char,
json_exp: *const c_char,
) -> *mut c_char {
let base: Expr = match from_json_string(json_base) {
| Some(e) => e,
| None => return std::ptr::null_mut(),
};
let exp: Expr = match from_json_string(json_exp) {
| Some(e) => e,
| None => return std::ptr::null_mut(),
};
to_json_string(&elementary::pow(base, exp))
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_pi_json() -> *mut c_char {
to_json_string(&elementary::pi())
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_e_json() -> *mut c_char {
to_json_string(&elementary::e())
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rssn_expand_json(json_expr: *const c_char) -> *mut c_char {
let expr: Expr = match from_json_string(json_expr) {
| Some(e) => e,
| None => return std::ptr::null_mut(),
};
to_json_string(&elementary::expand(expr))
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_binomial_coefficient_json(
n: usize,
k: usize,
) -> *mut c_char {
let result = elementary::binomial_coefficient(n, k);
to_c_string(format!("{{\"result\":\"{result}\"}}"))
}