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

///|
#external
pub type SkeletonUtils

///|
#module("@mizchi/three-mbt/rigging")
pub extern "js" fn SkeletonUtils::SkeletonUtils() -> SkeletonUtils = "skeletonUtils"

///|
extern "js" fn SkeletonUtils::ffi_retarget_meshes(
  self : SkeletonUtils,
  target : SkinnedMesh,
  source : SkinnedMesh,
  options : RetargetOptions,
) -> JsResult[Unit] =
  #| (self, target, source, options) => { try { return { ok: true, value: (() => self.retarget(target, source, options))() }; } catch (error) { return { ok: false, error: String(error) }; } }

///|
pub fn SkeletonUtils::retarget_meshes(
  self : SkeletonUtils,
  target : SkinnedMesh,
  source : SkinnedMesh,
  options : RetargetOptions,
) -> Unit raise ModelingError {
  match self.ffi_retarget_meshes(target, source, options).into_result() {
    Ok(value) => value
    Err(message) => raise ModelingError(message)
  }
}

///|
extern "js" fn SkeletonUtils::ffi_retarget_clip_meshes(
  self : SkeletonUtils,
  target : SkinnedMesh,
  source : SkinnedMesh,
  clip : AnimationClip,
  options : RetargetOptions,
) -> JsResult[AnimationClip] =
  #| (self, target, source, clip, options) => { try { return { ok: true, value: (() => self.retargetClip(target, source, clip, options))() }; } catch (error) { return { ok: false, error: String(error) }; } }

///|
pub fn SkeletonUtils::retarget_clip_meshes(
  self : SkeletonUtils,
  target : SkinnedMesh,
  source : SkinnedMesh,
  clip : AnimationClip,
  options : RetargetOptions,
) -> AnimationClip raise ModelingError {
  match
    self.ffi_retarget_clip_meshes(target, source, clip, options).into_result() {
    Ok(value) => value
    Err(message) => raise ModelingError(message)
  }
}

///|
extern "js" fn SkeletonUtils::ffi_retarget_skeletons(
  self : SkeletonUtils,
  target : Skeleton,
  source : Skeleton,
  options : RetargetOptions,
) -> JsResult[Unit] =
  #| (self, target, source, options) => { try { return { ok: true, value: (() => self.retarget(target, source, options))() }; } catch (error) { return { ok: false, error: String(error) }; } }

///|
pub fn SkeletonUtils::retarget_skeletons(
  self : SkeletonUtils,
  target : Skeleton,
  source : Skeleton,
  options : RetargetOptions,
) -> Unit raise ModelingError {
  match self.ffi_retarget_skeletons(target, source, options).into_result() {
    Ok(value) => value
    Err(message) => raise ModelingError(message)
  }
}

///|
extern "js" fn SkeletonUtils::ffi_retarget_clip_from_skeleton(
  self : SkeletonUtils,
  target : SkinnedMesh,
  source : Skeleton,
  clip : AnimationClip,
  options : RetargetOptions,
) -> JsResult[AnimationClip] =
  #| (self, target, source, clip, options) => { try { return { ok: true, value: (() => self.retargetClip(target, source, clip, options))() }; } catch (error) { return { ok: false, error: String(error) }; } }

///|
pub fn SkeletonUtils::retarget_clip_from_skeleton(
  self : SkeletonUtils,
  target : SkinnedMesh,
  source : Skeleton,
  clip : AnimationClip,
  options : RetargetOptions,
) -> AnimationClip raise ModelingError {
  match
    self
    .ffi_retarget_clip_from_skeleton(target, source, clip, options)
    .into_result() {
    Ok(value) => value
    Err(message) => raise ModelingError(message)
  }
}