mirror of
https://github.com/Yuyi-Oak/BlueArchiveToolkit.git
synced 2026-07-22 07:16:45 +08:00
refactor: reduce quality findings
This commit is contained in:
@@ -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())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user