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::SparsePolynomial;
use crate::symbolic::grobner::MonomialOrder;
use crate::symbolic::grobner::buchberger;
use crate::symbolic::grobner::poly_division_multivariate;
#[unsafe(no_mangle)]
pub extern "C" fn rssn_json_buchberger(
basis_json: *const c_char,
order_json: *const c_char,
) -> *mut c_char {
let basis: Option<Vec<SparsePolynomial>> = from_json_string(basis_json);
let order: Option<MonomialOrder> = from_json_string(order_json);
match (basis, order) {
| (Some(b), Some(o)) => {
match buchberger(&b, o) {
| Ok(result) => to_json_string(&result),
| Err(_) => std::ptr::null_mut(),
}
},
| _ => std::ptr::null_mut(),
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_json_poly_division_multivariate(
dividend_json: *const c_char,
divisors_json: *const c_char,
order_json: *const c_char,
) -> *mut c_char {
let dividend: Option<SparsePolynomial> = from_json_string(dividend_json);
let divisors: Option<Vec<SparsePolynomial>> = from_json_string(divisors_json);
let order: Option<MonomialOrder> = from_json_string(order_json);
match (dividend, divisors, order) {
| (Some(d), Some(divs), Some(o)) => {
match poly_division_multivariate(&d, &divs, o) {
| Ok(result) => to_json_string(&result),
| Err(_) => std::ptr::null_mut(),
}
},
| _ => std::ptr::null_mut(),
}
}