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

///|
#external
pub type ObjectLoader

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

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

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

///|
pub async fn ObjectLoader::load(
  self : ObjectLoader,
  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 ObjectLoader::ffi_parse_json(
  self : ObjectLoader,
  json : String,
) -> @js_async.Promise[Object3D] =
  #| (self, json) => Promise.resolve().then(() => self.parseAsync(JSON.parse(json)))

///|
pub async fn ObjectLoader::parse_json(
  self : ObjectLoader,
  json : Json,
) -> Object3D raise LoadError {
  try {
    let value = self.ffi_parse_json(json.stringify()).wait()
    value
  } catch {
    error => raise LoadError((error : Error).to_string())
  }
}

///|
extern "js" fn ObjectLoader::ffi_parse_json_string(
  self : ObjectLoader,
  text : String,
) -> @js_async.Promise[Object3D] =
  #| (self, text) => Promise.resolve().then(() => self.parseAsync(JSON.parse(text)))

///|
pub async fn ObjectLoader::parse_json_string(
  self : ObjectLoader,
  text : String,
) -> Object3D raise LoadError {
  try {
    let value = self.ffi_parse_json_string(text).wait()
    value
  } catch {
    error => raise LoadError((error : Error).to_string())
  }
}