#[swift_bridge::bridge]
mod ffi {
#[swift_bridge(swift_repr = "struct")]
pub struct ResolutionPathFFI {
pub initial_expr: String,
pub steps_json: String,
pub result_expr: String,
pub success: bool,
}
#[swift_bridge(swift_repr = "struct")]
pub struct CartesianCoords2D {
pub x: f64,
pub y: f64,
}
#[swift_bridge(swift_repr = "struct")]
pub struct CartesianCoords3D {
pub x: f64,
pub y: f64,
pub z: f64,
}
#[swift_bridge(swift_repr = "struct")]
pub struct PolarCoords {
pub r: f64,
pub theta: f64,
}
#[swift_bridge(swift_repr = "struct")]
pub struct SphericalCoords {
pub r: f64,
pub theta: f64,
pub phi: f64,
}
#[swift_bridge(swift_repr = "struct")]
pub struct ComplexNumber {
pub real: f64,
pub imaginary: f64,
}
#[swift_bridge(swift_repr = "struct")]
pub struct DifferentiationResultFFI {
pub original: String,
pub variable: String,
pub derivative: String,
pub derivative_latex: String,
}
#[swift_bridge(swift_repr = "struct")]
pub struct IntegrationResultFFI {
pub original: String,
pub variable: String,
pub integral: String,
pub integral_latex: String,
pub success: bool,
pub error_message: String,
}
#[swift_bridge(swift_repr = "struct")]
pub struct DefiniteIntegralResultFFI {
pub original: String,
pub variable: String,
pub lower_bound: f64,
pub upper_bound: f64,
pub value: String,
pub value_latex: String,
pub numeric_value: f64,
pub success: bool,
pub error_message: String,
}
#[swift_bridge(swift_repr = "struct")]
pub struct LimitResultFFI {
pub original: String,
pub variable: String,
pub approaches: String,
pub value: String,
pub value_latex: String,
pub numeric_value: f64,
pub success: bool,
pub error_message: String,
}
#[swift_bridge(swift_repr = "struct")]
pub struct EvaluationResultFFI {
pub original: String,
pub value: f64,
pub success: bool,
pub error_message: String,
}
#[swift_bridge(swift_repr = "struct")]
pub struct SimplificationResultFFI {
pub original: String,
pub simplified: String,
pub simplified_latex: String,
}
#[swift_bridge(swift_repr = "struct")]
pub struct ODEResultFFI {
pub equation: String,
pub solution: String,
pub solution_latex: String,
pub ode_type: String,
pub method_used: String,
pub success: bool,
pub error_message: String,
}
#[swift_bridge(swift_repr = "struct")]
pub struct TaylorSeriesResultFFI {
pub original: String,
pub variable: String,
pub center: f64,
pub order: u32,
pub series: String,
pub series_latex: String,
pub success: bool,
pub error_message: String,
}
#[swift_bridge(swift_repr = "struct")]
pub struct LaurentSeriesResultFFI {
pub original: String,
pub variable: String,
pub center: f64,
pub neg_order: u32,
pub pos_order: u32,
pub series: String,
pub series_latex: String,
pub success: bool,
pub error_message: String,
}
#[swift_bridge(swift_repr = "struct")]
pub struct AsymptoticSeriesResultFFI {
pub original: String,
pub variable: String,
pub direction: String,
pub num_terms: u32,
pub series: String,
pub series_latex: String,
pub success: bool,
pub error_message: String,
}
#[swift_bridge(swift_repr = "struct")]
pub struct SpecialFunctionResultFFI {
pub value: String,
pub value_latex: String,
pub numeric_value: f64,
pub derivation_steps: String,
pub success: bool,
pub error_message: String,
}
extern "Rust" {
fn parse_equation_ffi(input: &str) -> Result<String, String>;
fn parse_expression_ffi(input: &str) -> Result<String, String>;
}
extern "Rust" {
fn solve_ode_ffi(
equation: &str,
dependent_var: &str,
independent_var: &str,
) -> ODEResultFFI;
fn solve_ode_ivp_ffi(
equation: &str,
dependent_var: &str,
independent_var: &str,
initial_conditions_json: &str,
) -> ODEResultFFI;
fn solve_second_order_ode_ffi(
coefficients_json: &str,
forcing_fn: &str,
) -> Result<ODEResultFFI, String>;
fn solve_higher_order_ode_ffi(coefficients_json: &str) -> Result<ODEResultFFI, String>;
fn rk4_solve_ffi(
equation: &str,
variable: &str,
x0: f64,
y0: f64,
x_end: f64,
steps: u32,
) -> Result<String, String>;
}
extern "Rust" {
fn solve_equation_ffi(equation: &str, variable: &str) -> Result<String, String>;
fn solve_with_values_ffi(
equation: &str,
variable: &str,
known_values_json: &str,
) -> Result<ResolutionPathFFI, String>;
fn solve_numerically_ffi(
equation: &str,
variable: &str,
initial_guess: f64,
) -> Result<f64, String>;
}
extern "Rust" {
fn cartesian_to_polar_ffi(x: f64, y: f64) -> PolarCoords;
fn polar_to_cartesian_ffi(r: f64, theta: f64) -> CartesianCoords2D;
fn cartesian_to_spherical_ffi(x: f64, y: f64, z: f64) -> SphericalCoords;
fn spherical_to_cartesian_ffi(r: f64, theta: f64, phi: f64) -> CartesianCoords3D;
}
extern "Rust" {
fn complex_add_ffi(a_re: f64, a_im: f64, b_re: f64, b_im: f64) -> ComplexNumber;
fn complex_multiply_ffi(a_re: f64, a_im: f64, b_re: f64, b_im: f64) -> ComplexNumber;
fn complex_to_polar_ffi(re: f64, im: f64) -> PolarCoords;
fn complex_power_ffi(re: f64, im: f64, n: f64) -> ComplexNumber;
}
extern "Rust" {
fn parse_latex_ffi(input: &str) -> Result<String, String>;
fn parse_latex_to_latex_ffi(input: &str) -> Result<String, String>;
fn to_latex_ffi(expression: &str) -> Result<String, String>;
}
extern "Rust" {
fn differentiate_ffi(
expression: &str,
variable: &str,
) -> Result<DifferentiationResultFFI, String>;
fn differentiate_n_ffi(
expression: &str,
variable: &str,
n: u32,
) -> Result<DifferentiationResultFFI, String>;
fn gradient_ffi(expression: &str, variables_json: &str) -> Result<String, String>;
fn integrate_ffi(expression: &str, variable: &str) -> Result<IntegrationResultFFI, String>;
fn definite_integral_ffi(
expression: &str,
variable: &str,
lower: f64,
upper: f64,
) -> Result<DefiniteIntegralResultFFI, String>;
fn limit_ffi(
expression: &str,
variable: &str,
approaches: f64,
) -> Result<LimitResultFFI, String>;
fn limit_infinity_ffi(expression: &str, variable: &str) -> Result<LimitResultFFI, String>;
}
extern "Rust" {
fn evaluate_ffi(expression: &str, values_json: &str)
-> Result<EvaluationResultFFI, String>;
fn simplify_ffi(expression: &str) -> Result<SimplificationResultFFI, String>;
fn simplify_trig_ffi(expression: &str) -> Result<SimplificationResultFFI, String>;
fn simplify_trig_with_steps_ffi(expression: &str) -> Result<String, String>;
}
extern "Rust" {
fn solve_system_ffi(equations_json: &str) -> Result<String, String>;
fn solve_inequality_ffi(inequality: &str, variable: &str) -> Result<String, String>;
fn partial_fractions_ffi(
numerator: &str,
denominator: &str,
variable: &str,
) -> Result<String, String>;
fn solve_equation_system_ffi(
equations_json: &str,
known_values_json: &str,
targets_json: &str,
) -> Result<String, String>;
}
extern "Rust" {
fn taylor_series_ffi(
expression: &str,
variable: &str,
center: f64,
order: u32,
) -> Result<TaylorSeriesResultFFI, String>;
fn maclaurin_series_ffi(
expression: &str,
variable: &str,
order: u32,
) -> Result<TaylorSeriesResultFFI, String>;
fn laurent_series_ffi(
expression: &str,
variable: &str,
center: f64,
neg_order: u32,
pos_order: u32,
) -> Result<LaurentSeriesResultFFI, String>;
fn asymptotic_series_ffi(
expression: &str,
variable: &str,
direction: &str,
num_terms: u32,
) -> Result<AsymptoticSeriesResultFFI, String>;
fn compose_series_ffi(
outer: &str,
inner: &str,
variable: &str,
order: u32,
) -> Result<TaylorSeriesResultFFI, String>;
fn reversion_series_ffi(
expression: &str,
variable: &str,
order: u32,
) -> Result<TaylorSeriesResultFFI, String>;
}
extern "Rust" {
fn gamma_ffi(x: f64) -> Result<SpecialFunctionResultFFI, String>;
fn erf_ffi(x: f64) -> Result<SpecialFunctionResultFFI, String>;
fn beta_ffi(a: f64, b: f64) -> Result<SpecialFunctionResultFFI, String>;
fn erfc_ffi(x: f64) -> Result<SpecialFunctionResultFFI, String>;
}
#[swift_bridge(swift_repr = "struct")]
pub struct PrecisionEvaluationResultFFI {
pub original: String,
pub value: f64,
pub value_string: String,
pub precision_mode: String,
pub rounding_mode: String,
pub success: bool,
pub error_message: String,
}
extern "Rust" {
fn evaluate_with_precision_ffi(
expression: &str,
values_json: &str,
mode: &str,
precision: u32,
rounding: &str,
) -> Result<PrecisionEvaluationResultFFI, String>;
fn optimize_for_manual_computation_ffi(expression: &str) -> Result<String, String>;
fn small_angle_approximation_ffi(
expression: &str,
variable: &str,
threshold: f64,
) -> Result<String, String>;
}
#[swift_bridge(swift_repr = "struct")]
pub struct FourierSeriesResultFFI {
pub original: String,
pub variable: String,
pub num_terms: u32,
pub period: f64,
pub a_coefficients_json: String,
pub b_coefficients_json: String,
pub series: String,
pub series_latex: String,
pub success: bool,
pub error_message: String,
}
extern "Rust" {
fn fourier_series_ffi(
expression: &str,
variable: &str,
num_terms: u32,
period: f64,
) -> Result<FourierSeriesResultFFI, String>;
}
extern "Rust" {
fn translate_2d_ffi(x: f64, y: f64, dx: f64, dy: f64) -> CartesianCoords2D;
fn rotate_2d_ffi(x: f64, y: f64, theta: f64) -> CartesianCoords2D;
fn scale_2d_ffi(x: f64, y: f64, sx: f64, sy: f64) -> CartesianCoords2D;
}
extern "Rust" {
fn complex_nth_roots_ffi(re: f64, im: f64, n: i32) -> Result<String, String>;
}
extern "Rust" {
fn convert_units_ffi(value: f64, from_unit: &str, to_unit: &str) -> Result<f64, String>;
}
extern "Rust" {
fn parse_latex_calculus_ffi(input: &str) -> Result<String, String>;
}
}