use std::ffi::c_char;
use crate::ffi_apis::common::from_json_string;
use crate::ffi_apis::common::to_json_string;
use crate::symbolic::core::Expr;
use crate::symbolic::multi_valued::abs;
use crate::symbolic::multi_valued::arg;
use crate::symbolic::multi_valued::general_arccos;
use crate::symbolic::multi_valued::general_arcsin;
use crate::symbolic::multi_valued::general_arctan;
use crate::symbolic::multi_valued::general_log;
use crate::symbolic::multi_valued::general_nth_root;
use crate::symbolic::multi_valued::general_power;
use crate::symbolic::multi_valued::general_sqrt;
#[unsafe(no_mangle)]
pub extern "C" fn rssn_json_general_log(
z_json: *const c_char,
k_json: *const c_char,
) -> *mut c_char {
let z: Option<Expr> = from_json_string(z_json);
let k: Option<Expr> = from_json_string(k_json);
match (z, k) {
| (Some(z_expr), Some(k_expr)) => {
let result = general_log(&z_expr, &k_expr);
to_json_string(&result)
},
| _ => std::ptr::null_mut(),
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_json_general_sqrt(
z_json: *const c_char,
k_json: *const c_char,
) -> *mut c_char {
let z: Option<Expr> = from_json_string(z_json);
let k: Option<Expr> = from_json_string(k_json);
match (z, k) {
| (Some(z_expr), Some(k_expr)) => {
let result = general_sqrt(&z_expr, &k_expr);
to_json_string(&result)
},
| _ => std::ptr::null_mut(),
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_json_general_power(
z_json: *const c_char,
w_json: *const c_char,
k_json: *const c_char,
) -> *mut c_char {
let z: Option<Expr> = from_json_string(z_json);
let w: Option<Expr> = from_json_string(w_json);
let k: Option<Expr> = from_json_string(k_json);
match (z, w, k) {
| (Some(z_expr), Some(w_expr), Some(k_expr)) => {
let result = general_power(&z_expr, &w_expr, &k_expr);
to_json_string(&result)
},
| _ => std::ptr::null_mut(),
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_json_general_nth_root(
z_json: *const c_char,
n_json: *const c_char,
k_json: *const c_char,
) -> *mut c_char {
let z: Option<Expr> = from_json_string(z_json);
let n: Option<Expr> = from_json_string(n_json);
let k: Option<Expr> = from_json_string(k_json);
match (z, n, k) {
| (Some(z_expr), Some(n_expr), Some(k_expr)) => {
let result = general_nth_root(&z_expr, &n_expr, &k_expr);
to_json_string(&result)
},
| _ => std::ptr::null_mut(),
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_json_general_arcsin(
z_json: *const c_char,
k_json: *const c_char,
) -> *mut c_char {
let z: Option<Expr> = from_json_string(z_json);
let k: Option<Expr> = from_json_string(k_json);
match (z, k) {
| (Some(z_expr), Some(k_expr)) => {
let result = general_arcsin(&z_expr, &k_expr);
to_json_string(&result)
},
| _ => std::ptr::null_mut(),
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_json_general_arccos(
z_json: *const c_char,
k_json: *const c_char,
s_json: *const c_char,
) -> *mut c_char {
let z: Option<Expr> = from_json_string(z_json);
let k: Option<Expr> = from_json_string(k_json);
let s: Option<Expr> = from_json_string(s_json);
match (z, k, s) {
| (Some(z_expr), Some(k_expr), Some(s_expr)) => {
let result = general_arccos(&z_expr, &k_expr, &s_expr);
to_json_string(&result)
},
| _ => std::ptr::null_mut(),
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_json_general_arctan(
z_json: *const c_char,
k_json: *const c_char,
) -> *mut c_char {
let z: Option<Expr> = from_json_string(z_json);
let k: Option<Expr> = from_json_string(k_json);
match (z, k) {
| (Some(z_expr), Some(k_expr)) => {
let result = general_arctan(&z_expr, &k_expr);
to_json_string(&result)
},
| _ => std::ptr::null_mut(),
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_json_arg(z_json: *const c_char) -> *mut c_char {
let z: Option<Expr> = from_json_string(z_json);
if let Some(z_expr) = z {
let result = arg(&z_expr);
to_json_string(&result)
} else {
std::ptr::null_mut()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_json_abs(z_json: *const c_char) -> *mut c_char {
let z: Option<Expr> = from_json_string(z_json);
if let Some(z_expr) = z {
let result = abs(&z_expr);
to_json_string(&result)
} else {
std::ptr::null_mut()
}
}