use crate::core::RuntimeProfile;
#[cfg(not(alloc_frugal))]
use crate::platform::runtime::get_platform;
pub use crate::platform::types::*;
#[cfg(not(alloc_frugal))]
fn fallback_native_capability_contract() -> NativeCapabilityContract {
default_capabilities_for(get_platform().family())
}
#[cfg(alloc_frugal)]
fn fallback_native_capability_contract() -> NativeCapabilityContract {
crate::platform::types::default_capabilities_for(crate::core::PlatformFamily::Embedded)
}
#[cfg(not(alloc_frugal))]
fn fallback_embedded_capability_contract() -> EmbeddedCapabilityContract {
EmbeddedCapabilityContract {
fixed_dpi: true,
low_memory_mode: true,
typed_widget_trigger: true,
}
}
#[cfg(not(alloc_frugal))]
pub fn negotiate_capability_contract(profile: RuntimeProfile) -> CapabilityContract {
match profile {
RuntimeProfile::Full => get_platform()
.native_capability_contract()
.map(CapabilityContract::Native)
.unwrap_or(CapabilityContract::Native(fallback_native_capability_contract())),
RuntimeProfile::Embedded => get_platform()
.embedded_capability_contract()
.map(CapabilityContract::Embedded)
.unwrap_or(CapabilityContract::Embedded(fallback_embedded_capability_contract())),
}
}
#[cfg(alloc_frugal)]
pub fn negotiate_capability_contract(_profile: RuntimeProfile) -> CapabilityContract {
CapabilityContract::Native(fallback_native_capability_contract())
}