// Generated by scripts/generate.mjs from bindings/api.mjs. Do not edit.

///|
#external
pub type CCDIKSolver

///|
#module("@mizchi/three-mbt/rigging")
pub extern "js" fn CCDIKSolver::CCDIKSolver(
  mesh : SkinnedMesh,
  chains : FixedArray[IKChain],
) -> CCDIKSolver = "cCDIKSolver"

///|
extern "js" fn CCDIKSolver::ffi_update(
  self : CCDIKSolver,
  blend : Double,
) -> JsResult[CCDIKSolver] =
  #| (self, blend) => { try { return { ok: true, value: (() => self.update(blend))() }; } catch (error) { return { ok: false, error: String(error) }; } }

///|
pub fn CCDIKSolver::update(
  self : CCDIKSolver,
  blend : Double,
) -> CCDIKSolver raise ModelingError {
  match self.ffi_update(blend).into_result() {
    Ok(value) => value
    Err(message) => raise ModelingError(message)
  }
}

///|
extern "js" fn CCDIKSolver::ffi_update_one(
  self : CCDIKSolver,
  chain : IKChain,
  blend : Double,
) -> JsResult[CCDIKSolver] =
  #| (self, chain, blend) => { try { return { ok: true, value: (() => self.updateOne(chain, blend))() }; } catch (error) { return { ok: false, error: String(error) }; } }

///|
pub fn CCDIKSolver::update_one(
  self : CCDIKSolver,
  chain : IKChain,
  blend : Double,
) -> CCDIKSolver raise ModelingError {
  match self.ffi_update_one(chain, blend).into_result() {
    Ok(value) => value
    Err(message) => raise ModelingError(message)
  }
}

///|
pub extern "js" fn CCDIKSolver::create_helper(
  self : CCDIKSolver,
  sphere_size : Double,
) -> CCDIKHelper =
  #| (self, sphere_size) => self.createHelper(sphere_size)

///|
pub extern "js" fn CCDIKSolver::mesh(self : CCDIKSolver) -> SkinnedMesh =
  #| (self) => self.mesh