chore: establish development baseline

This commit is contained in:
2026-06-28 01:27:09 +08:00
commit dd53e3054e
131 changed files with 19327 additions and 0 deletions
+47
View File
@@ -0,0 +1,47 @@
use bat_infrastructure::FileSystemCasRepository;
use bat_core::repositories::cas_repository::CasRepository;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
println!("🎮 BlueArchiveToolkit - CAS 存储演示");
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
// 创建 CAS Repository
let repo = FileSystemCasRepository::new("/tmp/bat-demo");
repo.init().await?;
println!("✅ CAS 存储已初始化");
// 存储一些数据
println!("\n📦 存储对象...");
let data1 = b"Hello, Blue Archive!";
let id1 = repo.store(data1).await?;
println!(" 存储对象 1: {}", &id1[..16]);
let data2 = b"This is a test file content";
let id2 = repo.store(data2).await?;
println!(" 存储对象 2: {}", &id2[..16]);
// 测试去重
println!("\n🔄 测试去重...");
let id1_dup = repo.store(data1).await?;
println!(" 相同内容再次存储: {}", &id1_dup[..16]);
println!(" 去重成功: {}", id1 == id1_dup);
// 获取对象
println!("\n📥 获取对象...");
let retrieved = repo.get(&id1).await?;
println!(" 原始数据: {:?}", String::from_utf8_lossy(data1));
println!(" 获取数据: {:?}", String::from_utf8_lossy(&retrieved));
println!(" 数据完整性: {}", data1 == retrieved.as_slice());
// 检查存在性
println!("\n🔍 检查对象存在性...");
println!(" 对象 1 存在: {}", repo.exists(&id1).await);
println!(" 对象 2 存在: {}", repo.exists(&id2).await);
println!(" 不存在的对象: {}", repo.exists(&"nonexistent".to_string()).await);
println!("\n✅ 演示完成!");
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
Ok(())
}
+52
View File
@@ -0,0 +1,52 @@
use bat_adapters::manifest::{AddressablesCatalogDriver, ManifestDriverRegistry};
use bat_adapters::manifest::ManifestDriver;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
println!("🎮 BlueArchiveToolkit - Addressables 解析演示");
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
// 创建 Driver
let driver = AddressablesCatalogDriver::new();
println!("✅ Driver: {}", driver.name());
// 模拟 Addressables Catalog
println!("\n📦 解析 Addressables Catalog...");
let catalog_json = r#"{
"m_LocatorId": "AddressablesMainContentCatalog",
"m_InternalIdPrefixes": ["https://cdn.example.com/"],
"m_InternalIds": [
"academy-model.bundle",
"academy-texture.bundle",
"ui-atlas.bundle",
"TableBundles-JP.bundle"
]
}"#;
if driver.can_parse(catalog_json.as_bytes()) {
println!(" ✅ 可以解析此 Catalog");
let manifest = driver.parse(catalog_json.as_bytes()).await?;
println!(" 解析结果:");
println!(" Locator ID: {:?}", manifest.metadata.locator_id);
println!(" 资源数量: {}", manifest.resources.len());
println!(" 资源列表:");
for (i, resource) in manifest.resources.iter().enumerate() {
println!(" {}. {} ({})", i + 1, resource.path, resource.resource_type);
}
}
// 测试 Registry
println!("\n🔄 测试 Driver Registry...");
let registry = ManifestDriverRegistry::with_defaults();
println!(" 注册的 Driver 数量: {}", registry.count());
let manifest = registry.parse(catalog_json.as_bytes()).await?;
println!(" ✅ Registry 自动解析成功");
println!(" 解析了 {} 个资源", manifest.resources.len());
println!("\n✅ 演示完成!");
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
Ok(())
}
+49
View File
@@ -0,0 +1,49 @@
use bat_adapters::unity::{Unity2021_3Adapter, UnityAdapterRegistry};
use bat_adapters::unity::RawAssetBundle;
use std::sync::Arc;
fn main() {
println!("🎮 BlueArchiveToolkit - Unity 适配器演示");
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
// 创建 Unity Adapter
let adapter = Unity2021_3Adapter::new();
println!("✅ Unity Adapter: {}", adapter.name());
println!(" 支持版本: 2021.3.0 - 2021.3.99");
// 模拟 UnityFS 文件头
println!("\n📦 测试 Unity 版本检测...");
let mut bundle_data = Vec::new();
bundle_data.extend_from_slice(b"UnityFS\0");
bundle_data.extend_from_slice(&[0, 0, 0, 8]);
bundle_data.extend_from_slice(b"5.x.x\02021.3.56f2\0");
let bundle = RawAssetBundle {
data: bundle_data,
path: Some("test.bundle".to_string()),
};
if adapter.can_handle(&bundle) {
println!(" ✅ 可以处理 Unity 2021.3.56f2");
} else {
println!(" ❌ 不支持此版本");
}
// 测试 Registry
println!("\n🔄 测试 Adapter Registry...");
let mut registry = UnityAdapterRegistry::new();
registry.register(Arc::new(Unity2021_3Adapter::new()));
println!(" 注册的适配器数量: {}", registry.count());
match registry.select_adapter(&bundle) {
Ok(selected) => {
println!(" ✅ 自动选择的适配器: {}", selected.name());
}
Err(e) => {
println!(" ❌ 选择失败: {}", e);
}
}
println!("\n✅ 演示完成!");
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
}