refactor(cli): move codec diagnostic mapping to Rust

Move LZMA and LZ4 compression-status classification into Rust while retaining
user-facing diagnostic text, format callbacks, and the existing C ABI boundary.
Unknown statuses continue to select the generic diagnostic path.

Test Plan:
- ulimit -v 41943040; CARGO_BUILD_JOBS=1 cargo +nightly fmt --manifest-path rust/Cargo.toml -- --check
- ulimit -v 41943040; CARGO_BUILD_JOBS=1 cargo clippy --manifest-path rust/Cargo.toml --all-targets -- -D warnings
- ulimit -v 41943040; CARGO_BUILD_JOBS=1 cargo test --manifest-path rust/Cargo.toml --all-targets (782 passed)
- ulimit -v 41943040; CARGO_BUILD_JOBS=1 cargo clippy --manifest-path rust/cli/Cargo.toml --all-targets -- -D warnings
- ulimit -v 41943040; CARGO_BUILD_JOBS=1 cargo test --manifest-path rust/cli/Cargo.toml --all-targets (179 passed)
- ulimit -v 41943040; make -j1
- ulimit -v 41943040; make -j1 -C tests test (all tests completed successfully)
This commit is contained in:
2026-07-20 06:43:54 +02:00
parent f7c04292d4
commit a00ba4c2b7
2 changed files with 157 additions and 14 deletions
+115
View File
@@ -1010,6 +1010,29 @@ pub const FIO_RUST_LZMA_INIT_XZ_ERROR: c_int = 3;
pub const FIO_RUST_LZMA_CODE_ERROR: c_int = 4;
pub const FIO_RUST_LZMA_INVALID_PROJECTION: c_int = 5;
pub const FIO_RUST_LZMA_DIAGNOSTIC_OK: c_int = 0;
pub const FIO_RUST_LZMA_DIAGNOSTIC_INIT_PRESET_ERROR: c_int = 1;
pub const FIO_RUST_LZMA_DIAGNOSTIC_INIT_ALONE_ERROR: c_int = 2;
pub const FIO_RUST_LZMA_DIAGNOSTIC_INIT_XZ_ERROR: c_int = 3;
pub const FIO_RUST_LZMA_DIAGNOSTIC_CODE_ERROR: c_int = 4;
pub const FIO_RUST_LZMA_DIAGNOSTIC_INVALID_PROJECTION: c_int = 5;
pub const FIO_RUST_LZMA_DIAGNOSTIC_UNKNOWN: c_int = 6;
/// Classifies LZMA compression statuses without owning the C CLI's messages.
/// The operational status values remain unchanged for the existing ABI.
#[no_mangle]
pub extern "C" fn FIO_rust_lzmaCompressionDiagnostic(status: c_int) -> c_int {
match status {
FIO_RUST_LZMA_OK => FIO_RUST_LZMA_DIAGNOSTIC_OK,
FIO_RUST_LZMA_INIT_PRESET_ERROR => FIO_RUST_LZMA_DIAGNOSTIC_INIT_PRESET_ERROR,
FIO_RUST_LZMA_INIT_ALONE_ERROR => FIO_RUST_LZMA_DIAGNOSTIC_INIT_ALONE_ERROR,
FIO_RUST_LZMA_INIT_XZ_ERROR => FIO_RUST_LZMA_DIAGNOSTIC_INIT_XZ_ERROR,
FIO_RUST_LZMA_CODE_ERROR => FIO_RUST_LZMA_DIAGNOSTIC_CODE_ERROR,
FIO_RUST_LZMA_INVALID_PROJECTION => FIO_RUST_LZMA_DIAGNOSTIC_INVALID_PROJECTION,
_ => FIO_RUST_LZMA_DIAGNOSTIC_UNKNOWN,
}
}
const FIO_RUST_LZMA_OK_CODE: c_int = 0;
const FIO_RUST_LZMA_STREAM_END: c_int = 1;
const FIO_RUST_LZMA_RUN: c_int = 0;
@@ -1068,6 +1091,29 @@ pub const FIO_RUST_LZ4_UPDATE_ERROR: c_int = 3;
pub const FIO_RUST_LZ4_END_ERROR: c_int = 4;
pub const FIO_RUST_LZ4_INVALID_PROJECTION: c_int = 5;
pub const FIO_RUST_LZ4_DIAGNOSTIC_OK: c_int = 0;
pub const FIO_RUST_LZ4_DIAGNOSTIC_CREATE_ERROR: c_int = 1;
pub const FIO_RUST_LZ4_DIAGNOSTIC_HEADER_ERROR: c_int = 2;
pub const FIO_RUST_LZ4_DIAGNOSTIC_UPDATE_ERROR: c_int = 3;
pub const FIO_RUST_LZ4_DIAGNOSTIC_END_ERROR: c_int = 4;
pub const FIO_RUST_LZ4_DIAGNOSTIC_INVALID_PROJECTION: c_int = 5;
pub const FIO_RUST_LZ4_DIAGNOSTIC_UNKNOWN: c_int = 6;
/// Classifies LZ4 compression statuses without owning the C CLI's messages.
/// The operational status values remain unchanged for the existing ABI.
#[no_mangle]
pub extern "C" fn FIO_rust_lz4CompressionDiagnostic(status: c_int) -> c_int {
match status {
FIO_RUST_LZ4_OK => FIO_RUST_LZ4_DIAGNOSTIC_OK,
FIO_RUST_LZ4_CREATE_ERROR => FIO_RUST_LZ4_DIAGNOSTIC_CREATE_ERROR,
FIO_RUST_LZ4_HEADER_ERROR => FIO_RUST_LZ4_DIAGNOSTIC_HEADER_ERROR,
FIO_RUST_LZ4_UPDATE_ERROR => FIO_RUST_LZ4_DIAGNOSTIC_UPDATE_ERROR,
FIO_RUST_LZ4_END_ERROR => FIO_RUST_LZ4_DIAGNOSTIC_END_ERROR,
FIO_RUST_LZ4_INVALID_PROJECTION => FIO_RUST_LZ4_DIAGNOSTIC_INVALID_PROJECTION,
_ => FIO_RUST_LZ4_DIAGNOSTIC_UNKNOWN,
}
}
pub type FIO_rust_lz4_create_fn = unsafe extern "C" fn(*mut c_void, c_uint, *mut usize) -> c_int;
pub type FIO_rust_lz4_prepare_fn =
unsafe extern "C" fn(*mut c_void, u64, c_int, c_int, usize, usize);
@@ -5082,6 +5128,75 @@ mod tests {
}
}
#[test]
fn lzma_compression_status_diagnostic_preserves_cli_mapping() {
for (status, diagnostic) in [
(FIO_RUST_LZMA_OK, FIO_RUST_LZMA_DIAGNOSTIC_OK),
(
FIO_RUST_LZMA_INIT_PRESET_ERROR,
FIO_RUST_LZMA_DIAGNOSTIC_INIT_PRESET_ERROR,
),
(
FIO_RUST_LZMA_INIT_ALONE_ERROR,
FIO_RUST_LZMA_DIAGNOSTIC_INIT_ALONE_ERROR,
),
(
FIO_RUST_LZMA_INIT_XZ_ERROR,
FIO_RUST_LZMA_DIAGNOSTIC_INIT_XZ_ERROR,
),
(
FIO_RUST_LZMA_CODE_ERROR,
FIO_RUST_LZMA_DIAGNOSTIC_CODE_ERROR,
),
(
FIO_RUST_LZMA_INVALID_PROJECTION,
FIO_RUST_LZMA_DIAGNOSTIC_INVALID_PROJECTION,
),
] {
assert_eq!(FIO_rust_lzmaCompressionDiagnostic(status), diagnostic);
}
for status in [-1, 99] {
assert_eq!(
FIO_rust_lzmaCompressionDiagnostic(status),
FIO_RUST_LZMA_DIAGNOSTIC_UNKNOWN
);
}
}
#[test]
fn lz4_compression_status_diagnostic_preserves_cli_mapping() {
for (status, diagnostic) in [
(FIO_RUST_LZ4_OK, FIO_RUST_LZ4_DIAGNOSTIC_OK),
(
FIO_RUST_LZ4_CREATE_ERROR,
FIO_RUST_LZ4_DIAGNOSTIC_CREATE_ERROR,
),
(
FIO_RUST_LZ4_HEADER_ERROR,
FIO_RUST_LZ4_DIAGNOSTIC_HEADER_ERROR,
),
(
FIO_RUST_LZ4_UPDATE_ERROR,
FIO_RUST_LZ4_DIAGNOSTIC_UPDATE_ERROR,
),
(FIO_RUST_LZ4_END_ERROR, FIO_RUST_LZ4_DIAGNOSTIC_END_ERROR),
(
FIO_RUST_LZ4_INVALID_PROJECTION,
FIO_RUST_LZ4_DIAGNOSTIC_INVALID_PROJECTION,
),
] {
assert_eq!(FIO_rust_lz4CompressionDiagnostic(status), diagnostic);
}
for status in [-1, 99] {
assert_eq!(
FIO_rust_lz4CompressionDiagnostic(status),
FIO_RUST_LZ4_DIAGNOSTIC_UNKNOWN
);
}
}
const SOURCE_POLICY_STAT: u8 = 1;
const SOURCE_POLICY_EXCLUDED: u8 = 2;
const SOURCE_POLICY_OPEN: u8 = 3;