diff --git a/crates/lune-std-fs/src/lib.rs b/crates/lune-std-fs/src/lib.rs old mode 100644 new mode 100755 index 954472a6..a50a9b66 --- a/crates/lune-std-fs/src/lib.rs +++ b/crates/lune-std-fs/src/lib.rs @@ -1,7 +1,7 @@ #![allow(clippy::cargo_common_metadata)] use std::io::ErrorKind as IoErrorKind; -use std::path::{PathBuf, MAIN_SEPARATOR}; +use std::path::PathBuf; use bstr::{BString, ByteSlice}; use mlua::prelude::*; @@ -50,29 +50,16 @@ async fn fs_read_dir(_: &Lua, path: String) -> LuaResult> { let mut dir_strings = Vec::new(); let mut dir = fs::read_dir(&path).await.into_lua_err()?; while let Some(dir_entry) = dir.next_entry().await.into_lua_err()? { - if let Some(dir_path_str) = dir_entry.path().to_str() { - dir_strings.push(dir_path_str.to_owned()); + if let Some(dir_name_str) = dir_entry.file_name().to_str() { + dir_strings.push(dir_name_str.to_owned()); } else { return Err(LuaError::RuntimeError(format!( - "File path could not be converted into a string: '{}'", - dir_entry.path().display() + "File name could not be converted into a string: '{}'", + dir_entry.file_name().to_string_lossy() ))); } } - let mut dir_string_prefix = path; - if !dir_string_prefix.ends_with(MAIN_SEPARATOR) { - dir_string_prefix.push(MAIN_SEPARATOR); - } - let dir_strings_no_prefix = dir_strings - .iter() - .map(|inner_path| { - inner_path - .trim() - .trim_start_matches(&dir_string_prefix) - .to_owned() - }) - .collect::>(); - Ok(dir_strings_no_prefix) + Ok(dir_strings) } async fn fs_write_file(_: &Lua, (path, contents): (String, BString)) -> LuaResult<()> { diff --git a/crates/lune-std-serde/src/compress_decompress.rs b/crates/lune-std-serde/src/compress_decompress.rs index 3e5aaa02..86b5c870 100644 --- a/crates/lune-std-serde/src/compress_decompress.rs +++ b/crates/lune-std-serde/src/compress_decompress.rs @@ -13,6 +13,7 @@ use async_compression::{ BrotliDecoder, BrotliEncoder, GzipDecoder, GzipEncoder, ZlibDecoder, ZlibEncoder, }, Level::Best as CompressionQuality, + Level::Precise as PreciseCompressionQuality, }; /** @@ -119,6 +120,7 @@ impl<'lua> FromLua<'lua> for CompressDecompressFormat { pub async fn compress<'lua>( source: impl AsRef<[u8]>, format: CompressDecompressFormat, + level: Option, ) -> LuaResult> { if let CompressDecompressFormat::LZ4 = format { let source = source.as_ref().to_vec(); @@ -130,18 +132,22 @@ pub async fn compress<'lua>( let mut bytes = Vec::new(); let reader = BufReader::new(source.as_ref()); + let compression_quality = match level { + Some(l) => PreciseCompressionQuality(l), + None => CompressionQuality, + }; match format { CompressDecompressFormat::Brotli => { - let mut encoder = BrotliEncoder::with_quality(reader, CompressionQuality); + let mut encoder = BrotliEncoder::with_quality(reader, compression_quality); copy(&mut encoder, &mut bytes).await?; } CompressDecompressFormat::GZip => { - let mut encoder = GzipEncoder::with_quality(reader, CompressionQuality); + let mut encoder = GzipEncoder::with_quality(reader, compression_quality); copy(&mut encoder, &mut bytes).await?; } CompressDecompressFormat::ZLib => { - let mut encoder = ZlibEncoder::with_quality(reader, CompressionQuality); + let mut encoder = ZlibEncoder::with_quality(reader, compression_quality); copy(&mut encoder, &mut bytes).await?; } CompressDecompressFormat::LZ4 => unreachable!(), diff --git a/crates/lune-std-serde/src/lib.rs b/crates/lune-std-serde/src/lib.rs index 4a66adf9..26ee26ab 100644 --- a/crates/lune-std-serde/src/lib.rs +++ b/crates/lune-std-serde/src/lib.rs @@ -46,9 +46,9 @@ fn serde_decode(lua: &Lua, (format, bs): (EncodeDecodeFormat, BString)) -> LuaRe async fn serde_compress( lua: &Lua, - (format, bs): (CompressDecompressFormat, BString), + (format, bs, level): (CompressDecompressFormat, BString, Option), ) -> LuaResult { - let bytes = compress(bs, format).await?; + let bytes = compress(bs, format, level).await?; lua.create_string(bytes) } diff --git a/types/serde.luau b/types/serde.luau index aa17edc2..cd2658d5 100644 --- a/types/serde.luau +++ b/types/serde.luau @@ -136,9 +136,10 @@ end @param format The format to use @param s The string to compress + @param level The compression level to use, clamped to the format's limits. The best compression level is used by default @return The compressed string ]=] -function serde.compress(format: CompressDecompressFormat, s: buffer | string): string +function serde.compress(format: CompressDecompressFormat, s: buffer | string, level: number?): string return nil :: any end