refactor(cli): move decompression status action policy to Rust
The decompression callback in fileio used to classify result statuses and select its display action with a C switch. That left scalar result policy in the C frontend even though Rust already owns the decompression dispatch and result classification, and it coupled the C callback to a diagnostic enum. Rust now exposes an ABI-checked status-action classifier. It keeps the original action ordering and preserves silent handling for statuses that have no display diagnostic, while the C callback retains the exact diagnostic strings, source-name formatting, and display operation. Invalid inputs map to a silent fallback action so the public callback remains behavior-compatible. Focused Rust tests cover every status class, invalid values, and the exported ABI result. Test Plan: - `git diff --cached --check` -- passed - `rustfmt --edition 2021 --check rust/src/fileio_asyncio.rs` -- passed - Full capped Rust/native verification remains pending until the parallel compression and decompression seams are integrated.
This commit is contained in:
+20
-15
@@ -472,14 +472,17 @@ enum {
|
||||
FIO_RUST_DECOMPRESS_PASS_THROUGH_ERROR = 9,
|
||||
FIO_RUST_DECOMPRESS_ZSTD_UNSUPPORTED = 10
|
||||
};
|
||||
/* Rust owns the decompression status-to-action policy. C keeps the exact
|
||||
* diagnostic strings and display callback around the resulting action. */
|
||||
enum {
|
||||
FIO_RUST_DECOMPRESS_DIAGNOSTIC_NONE = 0,
|
||||
FIO_RUST_DECOMPRESS_DIAGNOSTIC_EMPTY_INPUT = 1,
|
||||
FIO_RUST_DECOMPRESS_DIAGNOSTIC_SHORT_INPUT = 2,
|
||||
FIO_RUST_DECOMPRESS_DIAGNOSTIC_GZIP_UNSUPPORTED = 3,
|
||||
FIO_RUST_DECOMPRESS_DIAGNOSTIC_LZMA_UNSUPPORTED = 4,
|
||||
FIO_RUST_DECOMPRESS_DIAGNOSTIC_LZ4_UNSUPPORTED = 5,
|
||||
FIO_RUST_DECOMPRESS_DIAGNOSTIC_UNSUPPORTED_FORMAT = 6
|
||||
FIO_RUST_DECOMPRESS_ACTION_NOOP = 0,
|
||||
FIO_RUST_DECOMPRESS_ACTION_EMPTY_INPUT = 1,
|
||||
FIO_RUST_DECOMPRESS_ACTION_SHORT_INPUT = 2,
|
||||
FIO_RUST_DECOMPRESS_ACTION_GZIP_UNSUPPORTED = 3,
|
||||
FIO_RUST_DECOMPRESS_ACTION_LZMA_UNSUPPORTED = 4,
|
||||
FIO_RUST_DECOMPRESS_ACTION_LZ4_UNSUPPORTED = 5,
|
||||
FIO_RUST_DECOMPRESS_ACTION_UNSUPPORTED_FORMAT = 6,
|
||||
FIO_RUST_DECOMPRESS_ACTION_INVALID = 7
|
||||
};
|
||||
typedef int (*FIO_rust_decompress_frame_fn)(void* opaque,
|
||||
const char* srcFileName,
|
||||
@@ -513,7 +516,7 @@ int FIO_rust_finishDecompressFrames(int status,
|
||||
const char* srcFileName,
|
||||
U64 decodedSize,
|
||||
const FIO_rust_decompress_callbacks_t* callbacks);
|
||||
int FIO_rust_decompressStatusDiagnostic(int status);
|
||||
int FIO_rust_decompressStatusAction(int status);
|
||||
int FIO_rust_decompressPassThroughPolicy(int passThrough,
|
||||
int overwrite,
|
||||
int destinationIsStdout);
|
||||
@@ -4233,25 +4236,27 @@ static void FIO_rust_decompressStatusCallback(void* opaque,
|
||||
const char* srcFileName)
|
||||
{
|
||||
(void)opaque;
|
||||
switch (FIO_rust_decompressStatusDiagnostic(status)) {
|
||||
case FIO_RUST_DECOMPRESS_DIAGNOSTIC_EMPTY_INPUT:
|
||||
switch (FIO_rust_decompressStatusAction(status)) {
|
||||
case FIO_RUST_DECOMPRESS_ACTION_EMPTY_INPUT:
|
||||
DISPLAYLEVEL(1, "zstd: %s: unexpected end of file \n", srcFileName);
|
||||
break;
|
||||
case FIO_RUST_DECOMPRESS_DIAGNOSTIC_SHORT_INPUT:
|
||||
case FIO_RUST_DECOMPRESS_ACTION_SHORT_INPUT:
|
||||
DISPLAYLEVEL(1, "zstd: %s: unknown header \n", srcFileName);
|
||||
break;
|
||||
case FIO_RUST_DECOMPRESS_DIAGNOSTIC_GZIP_UNSUPPORTED:
|
||||
case FIO_RUST_DECOMPRESS_ACTION_GZIP_UNSUPPORTED:
|
||||
DISPLAYLEVEL(1, "zstd: %s: gzip file cannot be uncompressed (zstd compiled without HAVE_ZLIB) -- ignored \n", srcFileName);
|
||||
break;
|
||||
case FIO_RUST_DECOMPRESS_DIAGNOSTIC_LZMA_UNSUPPORTED:
|
||||
case FIO_RUST_DECOMPRESS_ACTION_LZMA_UNSUPPORTED:
|
||||
DISPLAYLEVEL(1, "zstd: %s: xz/lzma file cannot be uncompressed (zstd compiled without HAVE_LZMA) -- ignored \n", srcFileName);
|
||||
break;
|
||||
case FIO_RUST_DECOMPRESS_DIAGNOSTIC_LZ4_UNSUPPORTED:
|
||||
case FIO_RUST_DECOMPRESS_ACTION_LZ4_UNSUPPORTED:
|
||||
DISPLAYLEVEL(1, "zstd: %s: lz4 file cannot be uncompressed (zstd compiled without HAVE_LZ4) -- ignored \n", srcFileName);
|
||||
break;
|
||||
case FIO_RUST_DECOMPRESS_DIAGNOSTIC_UNSUPPORTED_FORMAT:
|
||||
case FIO_RUST_DECOMPRESS_ACTION_UNSUPPORTED_FORMAT:
|
||||
DISPLAYLEVEL(1, "zstd: %s: unsupported format \n", srcFileName);
|
||||
break;
|
||||
case FIO_RUST_DECOMPRESS_ACTION_NOOP:
|
||||
case FIO_RUST_DECOMPRESS_ACTION_INVALID:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user