///|
fn init_readline() -> Unit {
init_readline_internal()
}
///|
fn question_ffi(question : String, callback : (String) -> Unit) -> Unit {
let bytes = @encoding/utf8.encode(question)
let result_ptr = question_ffi_internal(bytes)
let result_bytes = result_ptr[0:-1] // 去除 \u{00}
// 去除末尾的 null 字符
if (try? @encoding/utf8.decode(result_bytes)) is Ok(text) {
callback(text)
} else {
callback("")
}
}
///|
fn wait_for_completion() -> Unit {
wait_for_completion_internal()
}
///|
fn close_ffi() -> Unit {
close_ffi_internal()
}
///|
extern "c" fn init_readline_internal() -> Unit = "init_readline_internal"
///|
#owned(question)
extern "c" fn question_ffi_internal(question : Bytes) -> Bytes = "question_ffi_internal"
///|
extern "c" fn close_ffi_internal() -> Unit = "close_ffi_internal"
///|
extern "c" fn wait_for_completion_internal() -> Unit = "wait_for_completion_internal"