use super::capabilities::Capability;
use super::{Platform, PlatformType};
pub struct MobilePlatform {
initialized: bool,
}
impl MobilePlatform {
pub fn new() -> Self {
Self { initialized: false }
}
pub fn is_ios() -> bool {
cfg!(target_os = "ios")
}
pub fn is_android() -> bool {
cfg!(target_os = "android")
}
}
impl Default for MobilePlatform {
fn default() -> Self {
Self::new()
}
}
impl Platform for MobilePlatform {
fn platform_type(&self) -> PlatformType {
PlatformType::Mobile
}
fn init(&mut self) -> Result<(), String> {
if self.initialized {
return Ok(());
}
#[cfg(any(feature = "mobile-ios", feature = "mobile-android"))]
{
}
self.initialized = true;
Ok(())
}
fn run(&mut self) -> Result<(), String> {
#[cfg(any(feature = "mobile-ios", feature = "mobile-android"))]
{
Ok(())
}
#[cfg(not(any(feature = "mobile-ios", feature = "mobile-android")))]
{
Err("Mobile platform not enabled".to_string())
}
}
fn supports_capability(&self, capability: Capability) -> bool {
match capability {
Capability::Camera => true,
Capability::Location => true,
Capability::Contacts => true,
Capability::Notifications => true,
Capability::Biometrics => true,
Capability::Haptics => true,
Capability::FilePicker => true,
Capability::Clipboard => true,
Capability::WebSocket => true,
Capability::LocalStorage => true,
Capability::BackgroundTasks => true,
Capability::Filesystem => cfg!(any(feature = "mobile-ios", feature = "mobile-android")),
Capability::SystemTray => false,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_mobile_platform_creation() {
let platform = MobilePlatform::new();
assert_eq!(platform.platform_type(), PlatformType::Mobile);
assert!(!platform.initialized);
}
#[test]
fn test_mobile_platform_init() {
let mut platform = MobilePlatform::new();
assert!(platform.init().is_ok());
assert!(platform.initialized);
}
#[test]
fn test_mobile_capabilities() {
let platform = MobilePlatform::new();
assert!(platform.supports_capability(Capability::Camera));
assert!(platform.supports_capability(Capability::Location));
assert!(platform.supports_capability(Capability::Contacts));
assert!(platform.supports_capability(Capability::Biometrics));
assert!(platform.supports_capability(Capability::Haptics));
assert!(!platform.supports_capability(Capability::SystemTray));
}
}