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

///|
#external
pub type FileLoader

///|
#module("@mizchi/three-mbt/constructors")
pub extern "js" fn FileLoader::FileLoader() -> FileLoader = "fileLoader"

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

///|
pub extern "js" fn FileLoader::set_mime_type(
  self : FileLoader,
  mime_type : String,
) -> FileLoader =
  #| (self, mime_type) => self.setMimeType(mime_type)

///|
extern "js" fn FileLoader::ffi_mime_type(self : FileLoader) -> Nullable[String] =
  #| (self) => self.mimeType

///|
pub fn FileLoader::mime_type(self : FileLoader) -> String? {
  self.ffi_mime_type().to_option()
}

///|
extern "js" fn FileLoader::ffi_response_type(
  self : FileLoader,
) -> Nullable[String] =
  #| (self) => self.responseType

///|
pub fn FileLoader::response_type(self : FileLoader) -> String? {
  self.ffi_response_type().to_option()
}

///|
extern "js" fn FileLoader::ffi_load_text(
  self : FileLoader,
  url : String,
) -> @js_async.Promise[String] =
  #| (self, url) => Promise.resolve().then(() => { self.setResponseType("text"); return self.loadAsync(url).then(value => { if (typeof value !== "string") throw new TypeError("FileLoader received a non-text cached/shared response"); return value; }); })

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

///|
extern "js" fn FileLoader::ffi_load_bytes(
  self : FileLoader,
  url : String,
) -> @js_async.Promise[Bytes] =
  #| (self, url) => Promise.resolve().then(() => { self.setResponseType("arraybuffer"); return self.loadAsync(url).then(value => { if (!(value instanceof ArrayBuffer)) throw new TypeError("FileLoader received a non-binary cached/shared response"); return new Uint8Array(value); }); })

///|
pub async fn FileLoader::load_bytes(
  self : FileLoader,
  url : String,
) -> Bytes raise LoadError {
  try {
    let value = self.ffi_load_bytes(url).wait()
    value
  } catch {
    error => raise LoadError((error : Error).to_string())
  }
}

///|
extern "js" fn FileLoader::ffi_load_json(
  self : FileLoader,
  url : String,
) -> @js_async.Promise[String] =
  #| (self, url) => Promise.resolve().then(() => { self.setResponseType("text"); return self.loadAsync(url).then(value => { if (typeof value !== "string") throw new TypeError("FileLoader received a non-text cached/shared response"); return value; }); })

///|
pub async fn FileLoader::load_json(
  self : FileLoader,
  url : String,
) -> Json raise LoadError {
  try {
    let value = self.ffi_load_json(url).wait()
    @json.parse(value)
  } catch {
    error => raise LoadError((error : Error).to_string())
  }
}

///|
pub extern "js" fn FileLoader::abort(self : FileLoader) -> FileLoader =
  #| (self) => self.abort()