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

///|
#external
pub type FogExp2

///|
#module("@mizchi/three-mbt/constructors")
pub extern "js" fn FogExp2::FogExp2(color : Int, density : Double) -> FogExp2 = "fogExp2"

///|
pub extern "js" fn FogExp2::color(self : FogExp2) -> Color =
  #| (self) => self.color

///|
pub extern "js" fn FogExp2::density(self : FogExp2) -> Double =
  #| (self) => self.density

///|
pub extern "js" fn FogExp2::set_density(self : FogExp2, value : Double) -> Unit =
  #| (self, value) => { self.density = value; }

///|
extern "js" fn FogExp2::ffi_to_json(self : FogExp2) -> JsResult[String] =
  #| (self) => { try { return { ok: true, value: (() => JSON.stringify(self.toJSON()))() }; } catch (error) { return { ok: false, error: String(error) }; } }

///|
pub fn FogExp2::to_json(self : FogExp2) -> Json raise SerializationError {
  match self.ffi_to_json().into_result() {
    Ok(value) =>
      @json.parse(value) catch {
        error => raise SerializationError((error : Error).to_string())
      }
    Err(message) => raise SerializationError(message)
  }
}

///|
extern "js" fn FogExp2::ffi_to_json_string(self : FogExp2) -> JsResult[String] =
  #| (self) => { try { return { ok: true, value: (() => JSON.stringify(self.toJSON()))() }; } catch (error) { return { ok: false, error: String(error) }; } }

///|
pub fn FogExp2::to_json_string(
  self : FogExp2,
) -> String raise SerializationError {
  match self.ffi_to_json_string().into_result() {
    Ok(value) => value
    Err(message) => raise SerializationError(message)
  }
}