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

///|
#external
pub type Rhino3dmLoader

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

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

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

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

///|
extern "js" fn Rhino3dmLoader::ffi_parse(
  self : Rhino3dmLoader,
  data : Bytes,
) -> @js_async.Promise[Object3D] =
  #| (self, data) => Promise.resolve().then(() => new Promise((resolve,reject)=>self.parse(data.buffer.slice(data.byteOffset,data.byteOffset+data.byteLength),resolve,reject)))

///|
pub async fn Rhino3dmLoader::parse(
  self : Rhino3dmLoader,
  data : Bytes,
) -> Object3D raise LoadError {
  try {
    let value = self.ffi_parse(data).wait()
    value
  } catch {
    error => raise LoadError((error : Error).to_string())
  }
}

///|
pub extern "js" fn Rhino3dmLoader::set_library_path(
  self : Rhino3dmLoader,
  path : String,
) -> Rhino3dmLoader =
  #| (self, path) => self.setLibraryPath(path)

///|
pub extern "js" fn Rhino3dmLoader::set_worker_limit(
  self : Rhino3dmLoader,
  count : Int,
) -> Rhino3dmLoader =
  #| (self, count) => self.setWorkerLimit(count)

///|
pub extern "js" fn Rhino3dmLoader::dispose(
  self : Rhino3dmLoader,
) -> Rhino3dmLoader =
  #| (self) => self.dispose()