// FFI declarations for the C bridge in `c/bridge.c`.
//
// `ParseHandle` and `DumpHandle` are raw malloc'd pointers that are explicitly
// recycled with the matching `*_free` functions; `Node` points into a tree
// owned by one of those handles.
///|
#external
priv type ParseHandle
///|
#external
priv type DumpHandle
///|
#external
priv type Node
///|
#borrow(input)
extern "C" fn parse_bytes_ffi(input : Bytes) -> ParseHandle = "mb_orjson_parse_bytes"
///|
#borrow(input)
extern "C" fn parse_string_ffi(input : String) -> ParseHandle = "mb_orjson_parse_string"
///|
extern "C" fn parse_handle_is_null(handle : ParseHandle) -> Int32 = "mb_orjson_handle_is_null"
///|
extern "C" fn parse_handle_ok(handle : ParseHandle) -> Int32 = "mb_orjson_parse_ok"
///|
extern "C" fn parse_handle_root(handle : ParseHandle) -> Node = "mb_orjson_parse_root"
///|
extern "C" fn parse_handle_error(handle : ParseHandle) -> String = "mb_orjson_parse_error"
///|
extern "C" fn parse_handle_error_pos(handle : ParseHandle) -> Int32 = "mb_orjson_parse_error_pos"
///|
extern "C" fn parse_handle_free(handle : ParseHandle) -> Unit = "mb_orjson_parse_free"
///|
extern "C" fn node_type(node : Node) -> Int32 = "mb_orjson_node_type"
///|
extern "C" fn node_bool(node : Node) -> Int32 = "mb_orjson_node_bool"
///|
extern "C" fn node_int(node : Node) -> Int64 = "mb_orjson_node_int"
///|
extern "C" fn node_uint(node : Node) -> UInt64 = "mb_orjson_node_uint"
///|
extern "C" fn node_float(node : Node) -> Double = "mb_orjson_node_float"
///|
extern "C" fn node_string(node : Node) -> String = "mb_orjson_node_string"
///|
extern "C" fn node_size(node : Node) -> Int32 = "mb_orjson_node_size"
///|
extern "C" fn node_array_get(node : Node, index : Int32) -> Node = "mb_orjson_node_array_get"
///|
extern "C" fn node_object_key(node : Node, index : Int32) -> String = "mb_orjson_node_object_key"
///|
extern "C" fn node_object_get(node : Node, index : Int32) -> Node = "mb_orjson_node_object_get"
///|
extern "C" fn node_is_null(node : Node) -> Int32 = "mb_orjson_node_is_null"
///|
extern "C" fn build_null_ffi() -> Node = "mb_orjson_build_null"
///|
extern "C" fn build_bool_ffi(value : Int32) -> Node = "mb_orjson_build_bool"
///|
extern "C" fn build_int_ffi(value : Int64) -> Node = "mb_orjson_build_int"
///|
extern "C" fn build_uint_ffi(value : UInt64) -> Node = "mb_orjson_build_uint"
///|
extern "C" fn build_float_ffi(value : Double) -> Node = "mb_orjson_build_float"
///|
#borrow(value)
extern "C" fn build_string_ffi(value : String) -> Node = "mb_orjson_build_string"
///|
#borrow(value)
extern "C" fn build_raw_ffi(value : String) -> Node = "mb_orjson_build_raw"
///|
extern "C" fn build_array_ffi() -> Node = "mb_orjson_build_array"
///|
extern "C" fn build_object_ffi() -> Node = "mb_orjson_build_object"
///|
extern "C" fn array_push_ffi(array : Node, item : Node) -> Int32 = "mb_orjson_array_push"
///|
#borrow(key)
extern "C" fn object_put_ffi(
object : Node,
key : String,
value : Node,
) -> Int32 = "mb_orjson_object_put"
///|
extern "C" fn build_error_ffi() -> String = "mb_orjson_build_error"
///|
extern "C" fn tree_free_ffi(tree : Node) -> Unit = "mb_orjson_tree_free"
///|
extern "C" fn dump_ffi(
tree : Node,
indent : Int32,
sort_keys : Int32,
append_newline : Int32,
) -> DumpHandle = "mb_orjson_dump"
///|
extern "C" fn dump_handle_is_null(handle : DumpHandle) -> Int32 = "mb_orjson_handle_is_null"
///|
extern "C" fn dump_ok(handle : DumpHandle) -> Int32 = "mb_orjson_dump_ok"
///|
extern "C" fn dump_text(handle : DumpHandle) -> String = "mb_orjson_dump_text"
///|
extern "C" fn dump_error(handle : DumpHandle) -> String = "mb_orjson_dump_error"
///|
extern "C" fn dump_free(handle : DumpHandle) -> Unit = "mb_orjson_dump_free"