mirror of
https://github.com/Yuyi-Oak/BlueArchiveToolkit.git
synced 2026-07-22 06:56:44 +08:00
refactor: reduce quality findings
This commit is contained in:
@@ -23,19 +23,23 @@ impl AddressablesCatalogDriver {
|
||||
}
|
||||
|
||||
fn locator_id(json: &Value) -> Option<String> {
|
||||
json.get("m_LocatorId")
|
||||
let locator = json
|
||||
.get("m_LocatorId")
|
||||
.and_then(|value| value.as_str())
|
||||
.map(ToOwned::to_owned)
|
||||
.map(ToOwned::to_owned);
|
||||
locator
|
||||
}
|
||||
|
||||
fn cdn_prefixes(json: &Value) -> Vec<String> {
|
||||
json.get("m_InternalIdPrefixes")
|
||||
let prefixes = json
|
||||
.get("m_InternalIdPrefixes")
|
||||
.and_then(|value| value.as_array())
|
||||
.into_iter()
|
||||
.flatten()
|
||||
.filter_map(|value| value.as_str())
|
||||
.map(ToOwned::to_owned)
|
||||
.collect()
|
||||
.collect();
|
||||
prefixes
|
||||
}
|
||||
|
||||
fn resource_type_for_path(path: &str) -> ResourceType {
|
||||
@@ -49,7 +53,8 @@ impl AddressablesCatalogDriver {
|
||||
}
|
||||
|
||||
fn resources(json: &Value) -> Vec<ResourceEntry> {
|
||||
json.get("m_InternalIds")
|
||||
let resources = json
|
||||
.get("m_InternalIds")
|
||||
.and_then(|value| value.as_array())
|
||||
.into_iter()
|
||||
.flatten()
|
||||
@@ -67,7 +72,8 @@ impl AddressablesCatalogDriver {
|
||||
resource_type: Self::resource_type_for_path(path),
|
||||
})
|
||||
})
|
||||
.collect()
|
||||
.collect();
|
||||
resources
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -179,7 +179,8 @@ impl ManifestDriverRegistry {
|
||||
/// ```
|
||||
pub async fn parse(&self, raw_data: &[u8]) -> Result<GenericManifest, String> {
|
||||
let driver = self.select_driver(raw_data)?;
|
||||
driver.parse(raw_data).await
|
||||
let manifest = driver.parse(raw_data).await?;
|
||||
Ok(manifest)
|
||||
}
|
||||
|
||||
/// 获取所有已注册的 Driver
|
||||
|
||||
@@ -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