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!("โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"); }