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

///|
#external
pub type PackedBufferAttribute

///|
pub fn PackedBufferAttribute::as_buffer_attribute(
  self : PackedBufferAttribute,
) -> BufferAttribute = "%identity"

///|
pub extern "js" fn PackedBufferAttribute::id(
  self : PackedBufferAttribute,
) -> Int =
  #| (self) => self.id

///|
pub extern "js" fn PackedBufferAttribute::version(
  self : PackedBufferAttribute,
) -> Int =
  #| (self) => self.version

///|
pub extern "js" fn PackedBufferAttribute::gpu_type(
  self : PackedBufferAttribute,
) -> AttributeGPUType =
  #| (self) => self.gpuType

///|
pub extern "js" fn PackedBufferAttribute::set_gpu_type(
  self : PackedBufferAttribute,
  value : AttributeGPUType,
) -> Unit =
  #| (self, value) => { self.gpuType = value; }

///|
pub extern "js" fn PackedBufferAttribute::raw_values(
  self : PackedBufferAttribute,
) -> FixedArray[Double] =
  #| (self) => Array.from(self.array)

///|
pub extern "js" fn PackedBufferAttribute::clone(
  self : PackedBufferAttribute,
) -> PackedBufferAttribute =
  #| (self) => self.clone()

///|
pub extern "js" fn PackedBufferAttribute::copy(
  self : PackedBufferAttribute,
  source : PackedBufferAttribute,
) -> PackedBufferAttribute =
  #| (self, source) => self.copy(source)

///|
pub extern "js" fn PackedBufferAttribute::copy_at(
  self : PackedBufferAttribute,
  index : Int,
  source : PackedBufferAttribute,
  source_index : Int,
) -> PackedBufferAttribute =
  #| (self, index, source, source_index) => self.copyAt(index, source, source_index)

///|
pub extern "js" fn PackedBufferAttribute::copy_array(
  self : PackedBufferAttribute,
  values : FixedArray[Double],
) -> PackedBufferAttribute =
  #| (self, values) => self.copyArray(values)

///|
pub extern "js" fn PackedBufferAttribute::set(
  self : PackedBufferAttribute,
  values : FixedArray[Double],
  offset : Int,
) -> PackedBufferAttribute =
  #| (self, values, offset) => self.set(values, offset)

///|
pub extern "js" fn PackedBufferAttribute::apply_matrix3(
  self : PackedBufferAttribute,
  matrix : Matrix3,
) -> PackedBufferAttribute =
  #| (self, matrix) => self.applyMatrix3(matrix)

///|
pub extern "js" fn PackedBufferAttribute::on_upload(
  self : PackedBufferAttribute,
  callback : () -> Unit,
) -> PackedBufferAttribute =
  #| (self, callback) => self.onUpload(callback)

///|
pub extern "js" fn PackedBufferAttribute::dispose(
  self : PackedBufferAttribute,
) -> Unit =
  #| (self) => self.dispose()

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

///|
pub fn PackedBufferAttribute::to_json(
  self : PackedBufferAttribute,
) -> 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 PackedBufferAttribute::ffi_to_json_string(
  self : PackedBufferAttribute,
) -> JsResult[String] =
  #| (self) => { try { return { ok: true, value: (() => JSON.stringify(self.toJSON()))() }; } catch (error) { return { ok: false, error: String(error) }; } }

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