refactor: reduce quality findings

This commit is contained in:
2026-06-28 15:42:12 +08:00
parent 02716d3ccd
commit 3c00659691
11 changed files with 189 additions and 135 deletions
+20 -22
View File
@@ -5,6 +5,9 @@
use super::adapter::{ParsedAssetBundle, RawAssetBundle, UnityAdapter, VersionRange};
use async_trait::async_trait;
const PARSE_NOT_IMPLEMENTED: &str = "parse() 将在 Phase 2 实现";
const SERIALIZE_NOT_IMPLEMENTED: &str = "serialize() 将在 Phase 2 实现";
/// Unity 2021.3 Adapter
pub struct Unity2021_3Adapter;
@@ -14,35 +17,30 @@ impl Unity2021_3Adapter {
Self
}
/// 检测 Unity 版本(从文件头)
fn detect_unity_version(data: &[u8]) -> Option<String> {
// UnityFS 文件头结构:
// 0x00-0x06: "UnityFS\0"
// 0x08-0x0B: format version
// 0x0C-...: Unity version string
fn unity_version_bytes(data: &[u8]) -> Option<&[u8]> {
if data.len() < 20 {
return None;
}
// 检查签名
if &data[0..7] != b"UnityFS" {
return None;
}
// 读取 Unity 版本字符串
// 版本字符串从偏移 0x14 开始(可能因格式版本不同而变化)
if let Some(version_start) = data.windows(7).position(|w| w.starts_with(b"2021.3.")) {
// 读取版本字符串直到 null 或非 ASCII
let version_bytes = &data[version_start..];
if let Some(end) = version_bytes.iter().position(|&b| b == 0 || !b.is_ascii()) {
if let Ok(version) = std::str::from_utf8(&version_bytes[..end]) {
return Some(version.to_string());
}
}
}
let version_start = data.windows(7).position(|window| window == b"2021.3.")?;
let version_bytes = &data[version_start..];
let version_end = version_bytes
.iter()
.position(|&byte| byte == 0 || !byte.is_ascii())?;
None
Some(&version_bytes[..version_end])
}
/// 检测 Unity 版本(从文件头)
fn detect_unity_version(data: &[u8]) -> Option<String> {
let version_bytes = Self::unity_version_bytes(data)?;
std::str::from_utf8(version_bytes)
.map(ToOwned::to_owned)
.ok()
}
}
@@ -78,7 +76,7 @@ impl UnityAdapter for Unity2021_3Adapter {
// 2. 解压缩数据块
// 3. 解析 TypeTree
// 4. 提取 Asset 对象
Err("parse() 将在 Phase 2 实现".to_string())
Err(PARSE_NOT_IMPLEMENTED.to_string())
}
async fn serialize(&self, _parsed: &ParsedAssetBundle) -> Result<Vec<u8>, String> {
@@ -88,7 +86,7 @@ impl UnityAdapter for Unity2021_3Adapter {
// 2. 重新构建 TypeTree
// 3. 压缩数据块
// 4. 写入 UnityFS 文件头
Err("serialize() 将在 Phase 2 实现".to_string())
Err(SERIALIZE_NOT_IMPLEMENTED.to_string())
}
}