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

///|
#external
pub type BVHLoader

///|
#module("@mizchi/three-mbt/asset-extra")
pub extern "js" fn BVHLoader::BVHLoader() -> BVHLoader = "bVHLoader"

///|
pub fn BVHLoader::as_loader(self : BVHLoader) -> Loader = "%identity"

///|
extern "js" fn BVHLoader::ffi_load(
  self : BVHLoader,
  url : String,
) -> @js_async.Promise[BVHResult] =
  #| (self, url) => Promise.resolve().then(() => self.loadAsync(url))

///|
pub async fn BVHLoader::load(
  self : BVHLoader,
  url : String,
) -> BVHResult raise LoadError {
  try {
    let value = self.ffi_load(url).wait()
    value
  } catch {
    error => raise LoadError((error : Error).to_string())
  }
}

///|
extern "js" fn BVHLoader::ffi_parse(
  self : BVHLoader,
  text : String,
) -> JsResult[BVHResult] =
  #| (self, text) => { try { return { ok: true, value: (() => self.parse(text))() }; } catch (error) { return { ok: false, error: String(error) }; } }

///|
pub fn BVHLoader::parse(
  self : BVHLoader,
  text : String,
) -> BVHResult raise LoadError {
  match self.ffi_parse(text).into_result() {
    Ok(value) => value
    Err(message) => raise LoadError(message)
  }
}

///|
pub extern "js" fn BVHLoader::animate_bone_positions(self : BVHLoader) -> Bool =
  #| (self) => self.animateBonePositions

///|
pub extern "js" fn BVHLoader::set_animate_bone_positions(
  self : BVHLoader,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.animateBonePositions = value; }

///|
pub extern "js" fn BVHLoader::animate_bone_rotations(self : BVHLoader) -> Bool =
  #| (self) => self.animateBoneRotations

///|
pub extern "js" fn BVHLoader::set_animate_bone_rotations(
  self : BVHLoader,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.animateBoneRotations = value; }