// Auto-generated by napi-mbt. DO NOT EDIT.

///|
fn napi_mbt_read_0(
  env : NapiEnv,
  value : NapiValue,
  _path : Array[NapiValue],
) -> Int32 raise {
  get_Int(env, value)
}

///|
fn napi_mbt_read_1(
  env : NapiEnv,
  value : NapiValue,
  _path : Array[NapiValue],
) -> Bool raise {
  get_Bool(env, value)
}

///|
fn napi_mbt_read_2(
  env : NapiEnv,
  value : NapiValue,
  _path : Array[NapiValue],
) -> Double raise {
  get_Double(env, value)
}

///|
fn napi_mbt_read_3(
  env : NapiEnv,
  value : NapiValue,
  _path : Array[NapiValue],
) -> String raise {
  get_String(env, value)
}

///|
fn napi_mbt_read_4(
  env : NapiEnv,
  value : NapiValue,
  _path : Array[NapiValue],
) -> NapiBufferView raise {
  get_NapiBufferView(env, value)
}

///|
fn napi_mbt_read_5(
  env : NapiEnv,
  value : NapiValue,
  _path : Array[NapiValue],
) -> Bytes raise {
  get_Bytes(env, value)
}

///|
fn napi_mbt_write_0(
  env : NapiEnv,
  value : Int32,
  _depth : Int32,
) -> NapiValue raise {
  set_Int(env, value)
}

///|
fn napi_mbt_write_1(
  env : NapiEnv,
  value : Bool,
  _depth : Int32,
) -> NapiValue raise {
  set_Bool(env, value)
}

///|
fn napi_mbt_write_2(
  env : NapiEnv,
  value : Double,
  _depth : Int32,
) -> NapiValue raise {
  set_Double(env, value)
}

///|
fn napi_mbt_write_3(
  env : NapiEnv,
  value : String,
  _depth : Int32,
) -> NapiValue raise {
  set_String(env, value)
}

///|
fn napi_mbt_write_4(
  env : NapiEnv,
  value : Unit,
  _depth : Int32,
) -> NapiValue raise {
  set_Unit(env, value)
}

///|
fn napi_mbt_write_5(
  env : NapiEnv,
  value : Bytes,
  _depth : Int32,
) -> NapiValue raise {
  set_Bytes(env, value)
}

///|
#export_name("napi_mbt_adapter_add")
pub fn napi_mbt_adapter_add(
  env : NapiEnv,
  a0 : NapiValue,
  a1 : NapiValue,
) -> NapiValue {
  try {
    let p0 = napi_mbt_read_0(env, a0, [])
    let p1 = napi_mbt_read_0(env, a1, [])
    let result : Int32 = add(p0, p1)
    napi_mbt_write_0(env, result, 0)
  } catch {
    error => {
      throw_napi_error(env, error)
      moonbit_dummy_napi_value()
    }
  }
}

///|
#export_name("napi_mbt_adapter_check_bool")
pub fn napi_mbt_adapter_check_bool(env : NapiEnv, a0 : NapiValue) -> NapiValue {
  try {
    let p0 = napi_mbt_read_1(env, a0, [])
    let result : Bool = check_bool(p0)
    napi_mbt_write_1(env, result, 0)
  } catch {
    error => {
      throw_napi_error(env, error)
      moonbit_dummy_napi_value()
    }
  }
}

///|
#export_name("napi_mbt_adapter_check_double")
pub fn napi_mbt_adapter_check_double(
  env : NapiEnv,
  a0 : NapiValue,
) -> NapiValue {
  try {
    let p0 = napi_mbt_read_2(env, a0, [])
    let result : Double = check_double(p0)
    napi_mbt_write_2(env, result, 0)
  } catch {
    error => {
      throw_napi_error(env, error)
      moonbit_dummy_napi_value()
    }
  }
}

///|
#export_name("napi_mbt_adapter_concat")
pub fn napi_mbt_adapter_concat(
  env : NapiEnv,
  a0 : NapiValue,
  a1 : NapiValue,
) -> NapiValue {
  try {
    let p0 = napi_mbt_read_3(env, a0, [])
    let p1 = napi_mbt_read_3(env, a1, [])
    let result : String = concat(p0, p1)
    napi_mbt_write_3(env, result, 0)
  } catch {
    error => {
      throw_napi_error(env, error)
      moonbit_dummy_napi_value()
    }
  }
}

///|
#export_name("napi_mbt_adapter_mutate_buffer")
pub fn napi_mbt_adapter_mutate_buffer(
  env : NapiEnv,
  a0 : NapiValue,
) -> NapiValue {
  try {
    let p0 = napi_mbt_read_4(env, a0, [])
    defer p0.invalidate()
    let result : Unit = mutate_buffer(p0)
    napi_mbt_write_4(env, result, 0)
  } catch {
    error => {
      throw_napi_error(env, error)
      moonbit_dummy_napi_value()
    }
  }
}

///|
#export_name("napi_mbt_adapter_roundtrip_bytes")
pub fn napi_mbt_adapter_roundtrip_bytes(
  env : NapiEnv,
  a0 : NapiValue,
) -> NapiValue {
  try {
    let p0 = napi_mbt_read_5(env, a0, [])
    let result : Bytes = roundtrip_bytes(p0)
    napi_mbt_write_5(env, result, 0)
  } catch {
    error => {
      throw_napi_error(env, error)
      moonbit_dummy_napi_value()
    }
  }
}