Migrate lune-std-stdio to async-io instead of tokio

This commit is contained in:
Filip Tibell 2025-04-23 23:22:35 +02:00
parent 54115430f5
commit aeaebf4290
No known key found for this signature in database
3 changed files with 18 additions and 12 deletions

4
Cargo.lock generated
View file

@ -1732,11 +1732,13 @@ dependencies = [
name = "lune-std-stdio"
version = "0.1.2"
dependencies = [
"async-io",
"blocking",
"dialoguer",
"futures-lite",
"lune-utils",
"mlua",
"mlua-luau-scheduler",
"tokio",
]
[[package]]

View file

@ -13,13 +13,12 @@ path = "src/lib.rs"
workspace = true
[dependencies]
dialoguer = "0.11"
mlua = { version = "0.10.3", features = ["luau", "error-send"] }
mlua-luau-scheduler = { version = "0.0.2", path = "../mlua-luau-scheduler" }
tokio = { version = "1", default-features = false, features = [
"io-std",
"io-util",
] }
async-io = "2.4"
blocking = "1.6"
dialoguer = "0.11"
futures-lite = "2.6"
lune-utils = { version = "0.1.3", path = "../lune-utils" }

View file

@ -1,12 +1,17 @@
#![allow(clippy::cargo_common_metadata)]
use lune_utils::fmt::{pretty_format_multi_value, ValueFormatConfig};
use std::io::{stderr, stdin, stdout};
use mlua::prelude::*;
use mlua_luau_scheduler::LuaSpawnExt;
use tokio::io::{stderr, stdin, stdout, AsyncReadExt, AsyncWriteExt};
use blocking::Unblock;
use futures_lite::prelude::*;
use lune_utils::TableBuilder;
use lune_utils::{
fmt::{pretty_format_multi_value, ValueFormatConfig},
TableBuilder,
};
mod prompt;
mod style_and_color;
@ -50,14 +55,14 @@ fn stdio_format(_: &Lua, args: LuaMultiValue) -> LuaResult<String> {
}
async fn stdio_write(_: Lua, s: LuaString) -> LuaResult<()> {
let mut stdout = stdout();
let mut stdout = Unblock::new(stdout());
stdout.write_all(&s.as_bytes()).await?;
stdout.flush().await?;
Ok(())
}
async fn stdio_ewrite(_: Lua, s: LuaString) -> LuaResult<()> {
let mut stderr = stderr();
let mut stderr = Unblock::new(stderr());
stderr.write_all(&s.as_bytes()).await?;
stderr.flush().await?;
Ok(())
@ -73,7 +78,7 @@ async fn stdio_ewrite(_: Lua, s: LuaString) -> LuaResult<()> {
async fn stdio_read_to_end(lua: Lua, (): ()) -> LuaResult<LuaString> {
let mut input = Vec::new();
let mut stdin = stdin();
let mut stdin = Unblock::new(stdin());
stdin.read_to_end(&mut input).await?;
lua.create_string(&input)
}