Files
BlueArchiveToolkit/examples/manifest_demo.rs
T

53 lines
2.0 KiB
Rust

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(())
}