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

///|
#external
pub type ShaderDefines

///|
#module("@mizchi/three-mbt/material-edit")
pub extern "js" fn ShaderDefines::ShaderDefines() -> ShaderDefines = "shaderDefines"

///|
pub extern "js" fn ShaderDefines::set_int(
  self : ShaderDefines,
  name : String,
  value : Int,
) -> Unit =
  #| (self, name, value) => { self[name] = value; }

///|
extern "js" fn ShaderDefines::ffi_get_int(
  self : ShaderDefines,
  name : String,
) -> Nullable[Int] =
  #| (self, name) => { const value = self[name]; return Object.hasOwn(self,name) && Number.isInteger(value) && value >= -2147483648 && value <= 2147483647 ? value : null; }

///|
pub fn ShaderDefines::get_int(self : ShaderDefines, name : String) -> Int? {
  self.ffi_get_int(name).to_option()
}

///|
pub extern "js" fn ShaderDefines::set_float(
  self : ShaderDefines,
  name : String,
  value : Double,
) -> Unit =
  #| (self, name, value) => { self[name] = value; }

///|
extern "js" fn ShaderDefines::ffi_get_float(
  self : ShaderDefines,
  name : String,
) -> Nullable[Double] =
  #| (self, name) => { const value = self[name]; return Object.hasOwn(self,name) && typeof value === "number" ? value : null; }

///|
pub fn ShaderDefines::get_float(self : ShaderDefines, name : String) -> Double? {
  self.ffi_get_float(name).to_option()
}

///|
pub extern "js" fn ShaderDefines::set_bool(
  self : ShaderDefines,
  name : String,
  value : Bool,
) -> Unit =
  #| (self, name, value) => { self[name] = value; }

///|
extern "js" fn ShaderDefines::ffi_get_bool(
  self : ShaderDefines,
  name : String,
) -> Nullable[Bool] =
  #| (self, name) => { const value = self[name]; return Object.hasOwn(self,name) && typeof value === "boolean" ? value : null; }

///|
pub fn ShaderDefines::get_bool(self : ShaderDefines, name : String) -> Bool? {
  self.ffi_get_bool(name).to_option()
}

///|
pub extern "js" fn ShaderDefines::set_string(
  self : ShaderDefines,
  name : String,
  value : String,
) -> Unit =
  #| (self, name, value) => { self[name] = value; }

///|
extern "js" fn ShaderDefines::ffi_get_string(
  self : ShaderDefines,
  name : String,
) -> Nullable[String] =
  #| (self, name) => { const value = self[name]; return Object.hasOwn(self,name) && typeof value === "string" ? value : null; }

///|
pub fn ShaderDefines::get_string(
  self : ShaderDefines,
  name : String,
) -> String? {
  self.ffi_get_string(name).to_option()
}

///|
pub extern "js" fn ShaderDefines::remove(
  self : ShaderDefines,
  name : String,
) -> Unit =
  #| (self, name) => { delete self[name]; }

///|
pub extern "js" fn ShaderDefines::keys(
  self : ShaderDefines,
) -> FixedArray[String] =
  #| (self) => Object.keys(self)