use bat_adapters::manifest::ManifestDriver; use bat_adapters::manifest::{AddressablesCatalogDriver, ManifestDriverRegistry}; #[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://synthetic.invalid/"], "m_InternalIds": [ "synthetic/model.bundle", "synthetic/texture.bundle", "synthetic/ui-atlas.bundle", "synthetic/table-manifest.json" ] }"#; 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!( " {}. {} ({}, address={:?}, deps={})", i + 1, resource.path, resource.resource_type, resource.address, resource.dependencies.len() ); } } // ๆต‹่ฏ• 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(()) }