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

///|
#external
pub type GLTFLoader

///|
#module("@mizchi/three-mbt/loaders")
pub extern "js" fn GLTFLoader::GLTFLoader() -> GLTFLoader = "gLTFLoader"

///|
pub extern "js" fn GLTFLoader::set_path(
  self : GLTFLoader,
  path : String,
) -> GLTFLoader =
  #| (self, path) => self.setPath(path)

///|
pub extern "js" fn GLTFLoader::set_resource_path(
  self : GLTFLoader,
  path : String,
) -> GLTFLoader =
  #| (self, path) => self.setResourcePath(path)

///|
pub extern "js" fn GLTFLoader::set_with_credentials(
  self : GLTFLoader,
  enabled : Bool,
) -> GLTFLoader =
  #| (self, enabled) => self.setWithCredentials(enabled)

///|
pub extern "js" fn GLTFLoader::set_draco_loader(
  self : GLTFLoader,
  loader : DRACOLoader,
) -> GLTFLoader =
  #| (self, loader) => self.setDRACOLoader(loader)

///|
pub extern "js" fn GLTFLoader::set_ktx2_loader(
  self : GLTFLoader,
  loader : KTX2Loader,
) -> GLTFLoader =
  #| (self, loader) => self.setKTX2Loader(loader)

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

///|
pub extern "js" fn GLTFLoader::register(
  self : GLTFLoader,
  factory : (GLTFParser) -> GLTFLoaderPlugin,
) -> GLTFLoaderRegistration =
  #| (self, factory) => { const callback=context=>factory(context);self.register(callback);return {owner:self,callback,active:true}; }

///|
extern "js" fn GLTFLoader::ffi_unregister(
  self : GLTFLoader,
  registration : GLTFLoaderRegistration,
) -> JsResult[Unit] =
  #| (self, registration) => { try { return { ok: true, value: (() => { if(registration.owner!==self)throw new TypeError("Registration belongs to a different owner");if(registration.active){self.unregister(registration.callback);registration.active=false;} })() }; } catch (error) { return { ok: false, error: String(error) }; } }

///|
pub fn GLTFLoader::unregister(
  self : GLTFLoader,
  registration : GLTFLoaderRegistration,
) -> Unit raise LoadError {
  match self.ffi_unregister(registration).into_result() {
    Ok(value) => value
    Err(message) => raise LoadError(message)
  }
}