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