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

///|
#external
pub type Uniforms

///|
pub extern "js" fn Uniforms::set_float(
  self : Uniforms,
  name : String,
  value : Double,
) -> Unit =
  #| (self, name, value) => { if (Object.hasOwn(self, name)) self[name].value = value; else self[name] = { value }; }

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

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

///|
pub extern "js" fn Uniforms::set_int(
  self : Uniforms,
  name : String,
  value : Int,
) -> Unit =
  #| (self, name, value) => { if (Object.hasOwn(self, name)) self[name].value = value; else self[name] = { value }; }

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

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

///|
pub extern "js" fn Uniforms::set_bool(
  self : Uniforms,
  name : String,
  value : Bool,
) -> Unit =
  #| (self, name, value) => { if (Object.hasOwn(self, name)) self[name].value = value; else self[name] = { value }; }

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

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

///|
pub extern "js" fn Uniforms::set_color(
  self : Uniforms,
  name : String,
  value : Color,
) -> Unit =
  #| (self, name, value) => { if (Object.hasOwn(self, name)) self[name].value = value; else self[name] = { value }; }

///|
extern "js" fn Uniforms::ffi_get_color(
  self : Uniforms,
  name : String,
) -> Nullable[Color] =
  #| (self, name) => { const value = Object.hasOwn(self, name) ? self[name].value : undefined; return value?.isColor ? value : null; }

///|
pub fn Uniforms::get_color(self : Uniforms, name : String) -> Color? {
  self.ffi_get_color(name).to_option()
}

///|
pub extern "js" fn Uniforms::set_vector2(
  self : Uniforms,
  name : String,
  value : Vector2,
) -> Unit =
  #| (self, name, value) => { if (Object.hasOwn(self, name)) self[name].value = value; else self[name] = { value }; }

///|
extern "js" fn Uniforms::ffi_get_vector2(
  self : Uniforms,
  name : String,
) -> Nullable[Vector2] =
  #| (self, name) => { const value = Object.hasOwn(self, name) ? self[name].value : undefined; return value?.isVector2 ? value : null; }

///|
pub fn Uniforms::get_vector2(self : Uniforms, name : String) -> Vector2? {
  self.ffi_get_vector2(name).to_option()
}

///|
pub extern "js" fn Uniforms::set_vector3(
  self : Uniforms,
  name : String,
  value : Vector3,
) -> Unit =
  #| (self, name, value) => { if (Object.hasOwn(self, name)) self[name].value = value; else self[name] = { value }; }

///|
extern "js" fn Uniforms::ffi_get_vector3(
  self : Uniforms,
  name : String,
) -> Nullable[Vector3] =
  #| (self, name) => { const value = Object.hasOwn(self, name) ? self[name].value : undefined; return value?.isVector3 ? value : null; }

///|
pub fn Uniforms::get_vector3(self : Uniforms, name : String) -> Vector3? {
  self.ffi_get_vector3(name).to_option()
}

///|
pub extern "js" fn Uniforms::set_vector4(
  self : Uniforms,
  name : String,
  value : Vector4,
) -> Unit =
  #| (self, name, value) => { if (Object.hasOwn(self, name)) self[name].value = value; else self[name] = { value }; }

///|
extern "js" fn Uniforms::ffi_get_vector4(
  self : Uniforms,
  name : String,
) -> Nullable[Vector4] =
  #| (self, name) => { const value = Object.hasOwn(self, name) ? self[name].value : undefined; return value?.isVector4 ? value : null; }

///|
pub fn Uniforms::get_vector4(self : Uniforms, name : String) -> Vector4? {
  self.ffi_get_vector4(name).to_option()
}

///|
pub extern "js" fn Uniforms::set_matrix3(
  self : Uniforms,
  name : String,
  value : Matrix3,
) -> Unit =
  #| (self, name, value) => { if (Object.hasOwn(self, name)) self[name].value = value; else self[name] = { value }; }

///|
extern "js" fn Uniforms::ffi_get_matrix3(
  self : Uniforms,
  name : String,
) -> Nullable[Matrix3] =
  #| (self, name) => { const value = Object.hasOwn(self, name) ? self[name].value : undefined; return value?.isMatrix3 ? value : null; }

///|
pub fn Uniforms::get_matrix3(self : Uniforms, name : String) -> Matrix3? {
  self.ffi_get_matrix3(name).to_option()
}

///|
pub extern "js" fn Uniforms::set_matrix4(
  self : Uniforms,
  name : String,
  value : Matrix4,
) -> Unit =
  #| (self, name, value) => { if (Object.hasOwn(self, name)) self[name].value = value; else self[name] = { value }; }

///|
extern "js" fn Uniforms::ffi_get_matrix4(
  self : Uniforms,
  name : String,
) -> Nullable[Matrix4] =
  #| (self, name) => { const value = Object.hasOwn(self, name) ? self[name].value : undefined; return value?.isMatrix4 ? value : null; }

///|
pub fn Uniforms::get_matrix4(self : Uniforms, name : String) -> Matrix4? {
  self.ffi_get_matrix4(name).to_option()
}

///|
pub extern "js" fn Uniforms::set_texture(
  self : Uniforms,
  name : String,
  value : Texture,
) -> Unit =
  #| (self, name, value) => { if (Object.hasOwn(self, name)) self[name].value = value; else self[name] = { value }; }

///|
extern "js" fn Uniforms::ffi_get_texture(
  self : Uniforms,
  name : String,
) -> Nullable[Texture] =
  #| (self, name) => { const value = Object.hasOwn(self, name) ? self[name].value : undefined; return value?.isTexture ? value : null; }

///|
pub fn Uniforms::get_texture(self : Uniforms, name : String) -> Texture? {
  self.ffi_get_texture(name).to_option()
}