use std::os::raw::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::electromagnetism;
use crate::symbolic::vector::Vector;
#[unsafe(no_mangle)]
pub extern "C" fn rssn_json_lorentz_force(
charge_json: *const c_char,
e_field_json: *const c_char,
velocity_json: *const c_char,
b_field_json: *const c_char,
) -> *mut c_char {
let charge: Option<Expr> = from_json_string(charge_json);
let e_field: Option<Vector> = from_json_string(e_field_json);
let velocity: Option<Vector> = from_json_string(velocity_json);
let b_field: Option<Vector> = from_json_string(b_field_json);
match (charge, e_field, velocity, b_field) {
| (Some(q), Some(e), Some(v), Some(b)) => {
to_json_string(&electromagnetism::lorentz_force(&q, &e, &v, &b))
},
| _ => std::ptr::null_mut(),
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_json_electromagnetic_energy_density(
e_field_json: *const c_char,
b_field_json: *const c_char,
) -> *mut c_char {
let e_field: Option<Vector> = from_json_string(e_field_json);
let b_field: Option<Vector> = from_json_string(b_field_json);
match (e_field, b_field) {
| (Some(e), Some(b)) => to_json_string(&electromagnetism::energy_density(&e, &b)),
| _ => std::ptr::null_mut(),
}
}